Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java toJson()返回带有空字段的默认对象?_Java_Json_Gson_Inputstream - Fatal编程技术网

Java toJson()返回带有空字段的默认对象?

Java toJson()返回带有空字段的默认对象?,java,json,gson,inputstream,Java,Json,Gson,Inputstream,在我的Java处理程序类中,我试图使用Gson.toJson()方法来返回存根数据作为响应 我遇到的问题是Gson.toJson()方法没有正确映射我的Json,它所做的是给一个对象提供空字段和默认值 存根Json: { "order": [{ "from": "exampleCustomer", "alternateOrderIdentifier": [{ "type": "Service Type",

在我的
Java
处理程序类中,我试图使用
Gson.toJson()
方法来返回存根数据作为响应

我遇到的问题是
Gson.toJson()
方法没有正确映射我的
Json
,它所做的是给一个对象提供空字段和默认值

存根Json:

  {
    "order": [{
        "from": "exampleCustomer",
        "alternateOrderIdentifier": [{
                "type": "Service Type",
                "value": "order"
            },
            {
                "type": "Product Type",
                "value": "book"
            }
        ],
        "orderIdentifier": "order123"
    }]
  }
public class Order {

    private String actionCode = "Create";

    private AlternateOrderIdentifier[] alternateOrderIdentifier;

    private String from;

    private String status = "Open";

    private String orderIdentifier;

    private String customerId;

    public Order() {
    }

   //getters and setters

   }
@GET
    @Path("/my/path/order")
    public Response getOrderDetails(@QueryParam("orderId") String orderIdentifier
                                         ) throws IOException {

        Order order = new Order();
        try {
            InputStream is = StubOrderHandler.class.getResourceAsStream("/my/path/to/stubOrder.json");
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));
            Gson gson = new Gson();
            order = gson.fromJson(bufferedReader, Order.class);
        } catch (Exception e) {

        }
        return ResponseBuilder.anOKResponse().withEntity(order).build();
    }   
JavaPOJO:

  {
    "order": [{
        "from": "exampleCustomer",
        "alternateOrderIdentifier": [{
                "type": "Service Type",
                "value": "order"
            },
            {
                "type": "Product Type",
                "value": "book"
            }
        ],
        "orderIdentifier": "order123"
    }]
  }
public class Order {

    private String actionCode = "Create";

    private AlternateOrderIdentifier[] alternateOrderIdentifier;

    private String from;

    private String status = "Open";

    private String orderIdentifier;

    private String customerId;

    public Order() {
    }

   //getters and setters

   }
@GET
    @Path("/my/path/order")
    public Response getOrderDetails(@QueryParam("orderId") String orderIdentifier
                                         ) throws IOException {

        Order order = new Order();
        try {
            InputStream is = StubOrderHandler.class.getResourceAsStream("/my/path/to/stubOrder.json");
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));
            Gson gson = new Gson();
            order = gson.fromJson(bufferedReader, Order.class);
        } catch (Exception e) {

        }
        return ResponseBuilder.anOKResponse().withEntity(order).build();
    }   
Java处理程序方法:

  {
    "order": [{
        "from": "exampleCustomer",
        "alternateOrderIdentifier": [{
                "type": "Service Type",
                "value": "order"
            },
            {
                "type": "Product Type",
                "value": "book"
            }
        ],
        "orderIdentifier": "order123"
    }]
  }
public class Order {

    private String actionCode = "Create";

    private AlternateOrderIdentifier[] alternateOrderIdentifier;

    private String from;

    private String status = "Open";

    private String orderIdentifier;

    private String customerId;

    public Order() {
    }

   //getters and setters

   }
@GET
    @Path("/my/path/order")
    public Response getOrderDetails(@QueryParam("orderId") String orderIdentifier
                                         ) throws IOException {

        Order order = new Order();
        try {
            InputStream is = StubOrderHandler.class.getResourceAsStream("/my/path/to/stubOrder.json");
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));
            Gson gson = new Gson();
            order = gson.fromJson(bufferedReader, Order.class);
        } catch (Exception e) {

        }
        return ResponseBuilder.anOKResponse().withEntity(order).build();
    }   
在我的响应中返回的Order对象字段如下

actionCode = "Create"

    alternateOrderIdentifier = null

    from - null

    status = "Open"

    orderIdentifier = null

    customerId = null
显然,对象映射不正确

我希望CustomerId为空,因为我没有将其添加到存根Json中。但我不确定为什么我会得到空值,例如orderIdentifier和alternateOrderIdentifier


我确信json文件的路径和文件名是正确的。问题可能是什么?

类顺序的正确存根json应该是:

{"alternateOrderIdentifier":[{"type":"Service Type","value":"order"}],"from":"exampleCustomer","orderIdentifier":"order123"}

与现有的不同……基本上,您需要更改存根json,或者更改用于反序列化/序列化的类。考虑到存根json,java对象应该具有以下结构

public class MyPojo {
    private Order[] order;

    public Order[] getOrder () {
        return order;
    }

    public void setOrder (Order[] order) {
        this.order = order;
    }

    @Override
    public String toString() {
        return "ClassPojo [order = "+order+"]";
    }
}

public class Order {
    private AlternateOrderIdentifier[] alternateOrderIdentifier;

    private String orderIdentifier;

    private String from;

    public AlternateOrderIdentifier[] getAlternateOrderIdentifier () {
        return alternateOrderIdentifier;
    }

    public void setAlternateOrderIdentifier (AlternateOrderIdentifier[] alternateOrderIdentifier) {
        this.alternateOrderIdentifier = alternateOrderIdentifier;
    }

    public String getOrderIdentifier () {
        return orderIdentifier;
    }

    public void setOrderIdentifier (String orderIdentifier) {
        this.orderIdentifier = orderIdentifier; 
    }

    public String getFrom () {
        return from;
    }

    public void setFrom (String from) {
        this.from = from;
    }

    @Override
    public String toString() {
        return "ClassPojo [alternateOrderIdentifier = "+alternateOrderIdentifier+", orderIdentifier = "+orderIdentifier+", from = "+from+"]";
    }
}

public class AlternateOrderIdentifier {
    private String value;

    private String type;

    public String getValue () {
        return value;
    }

    public void setValue (String value) {
        this.value = value;
    }

    public String getType () {
        return type;
    }

    public void setType (String type) {
        this.type = type;
    }

    @Override
    public String toString() {
        return "ClassPojo [value = "+value+", type = "+type+"]";
    }
}

你能换存根吗?对象和存根json dont mapp correct我已检查存根是否为有效的json?字段的顺序是否重要?我还应该做什么更改?你的JSON和你的POJO不匹配。@chsdk我正在努力找出POJO和JSON之间到底有什么不匹配?查看与你的对象匹配的实际JSON的最好方法是序列化它…gson.toJson(order),这也是我在回答中使用的。我已经检查过JSON是否有效,它是否正确?对象的顺序不重要吗?是的,json是有效的,字段的顺序也不重要,但字段的级别很重要…在要测试的代码上替换我的存根json。好的,我会检查并回复。谢谢