0

使用 Java 6、Tomcat 7、Jersey 1.15、Jackson 2.0.6(来自 FasterXml maven repo)和 Google GSON 2.2.2,我试图漂亮地打印 JSON 字符串,因此它看起来会被 curl -X GET 命令行缩进.

我创建了一个简单的 Web 服务,它具有以下架构:

我的 POJO(模型类):

家庭.java

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Family {
    private String father;
    private String mother;

    private List<Children> children;

    // Getter & Setters
}

儿童.java:

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Children {
    private String name;
    private String age;
    private String gender;

    // Getters & Setters
}

使用实用程序类,我决定对 POJO 进行硬编码,如下所示:

public class FamilyUtil {

    public static Family getFamily() {
        Family family = new Family();
        family.setFather("Joe");
        family.setMother("Jennifer");

        Children child = new Children();
        child.setName("Jimmy");
        child.setAge("12");
        child.setGender("male");
        List<Children> children = new ArrayList<Children>();

        children.add(child);

        family.setChildren(children);
        return family;
    }
}

我的网络服务:

import java.io.IOException;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jettison.json.JSONException;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.myapp.util.FamilyUtil;

@Path("")
public class MyWebService {
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public static String getFamily() throws IOException, 
                                            JsonGenerationException, 
                                            JsonMappingException, 
                                            JSONException, 
                                            org.json.JSONException {
            ObjectMapper mapper = new ObjectMapper(); 
            String uglyJsonString = mapper.writeValueAsString(FamilyUtil.getFamily());
            Gson gson = new GsonBuilder().setPrettyPrinting().create();
            JsonParser parser = new JsonParser();
            JsonElement jsonElement = parser.parse(uglyJsonString);
            System.out.println(gson.toJson(jsonElement));
            return gson.toJson(jsonElement);
    }
}

当我使用以下命令运行它时:

curl -X GET http://localhost:8080/mywebservice

我在我的 Eclipse 控制台中得到了这个(这正是我想要的 curl 命令):

{
  "father": "Joe",
  "mother": "Jennifer",
  "children": [
    {
      "name": "Jimmy",
      "age": "12",
      "gender": "male"
    }
  ]
}

但是从上面列出的命令行 curl 命令中,我得到了这个(\n 之后有 4 个空格,但 JavaRanch 的论坛没有显示它):

"{\n  \"father\": \"Joe\",\n  \"mother\": \"Jennifer\",\n  \"children\": [\n    {\n      \"name\": \"Jimmy\",\n      \"age\": \"12\",\n      \"gender\": \"male\"\n    }\n  ]\n}"

如何使用 curl 命令使 JSON 格式与我在 Eclipse 控制台中得到的格式相同?

感谢您抽时间阅读...

4

0 回答 0