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。好的,我会检查并回复。谢谢