Gson.toJson() 返回带有空字段的默认对象?
Gson.toJson() returning default object with null fields?
在我的 Java
处理程序 class 中,我正在尝试使用 Gson.toJson()
方法来 return 存根数据作为响应。
我遇到的问题是 Gson.toJson()
方法没有正确映射我的 Json
,它正在做的是给一个带有空字段和默认值的对象。
存根 Json:
{
"order": [{
"from": "exampleCustomer",
"alternateOrderIdentifier": [{
"type": "Service Type",
"value": "order"
},
{
"type": "Product Type",
"value": "book"
}
],
"orderIdentifier": "order123"
}]
}
Java POJO:
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
}
Java处理方法:
@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();
}
我在回复中得到的 return 订单对象字段如下
actionCode = "Create"
alternateOrderIdentifier = null
from - null
status = "Open"
orderIdentifier = null
customerId = null
显然对象没有被正确映射。
我期待,例如CustomerId 为空,因为我还没有将它添加到 Stub Json。但我不确定为什么我会得到空值,例如orderIdentifier 和 alternateOrderIdentifier?
我确定 json 文件的路径和文件名是正确的。可能是什么问题?
class 订单的正确存根 json 应该是:
{"alternateOrderIdentifier":[{"type":"Service Type","value":"order"}],"from":"exampleCustomer","orderIdentifier":"order123"}
而不是你所拥有的...基本上你需要更改存根 json 或者你将你使用的 class 更改为 de-serialize/serialize
考虑到您的存根 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+"]";
}
}
在我的 Java
处理程序 class 中,我正在尝试使用 Gson.toJson()
方法来 return 存根数据作为响应。
我遇到的问题是 Gson.toJson()
方法没有正确映射我的 Json
,它正在做的是给一个带有空字段和默认值的对象。
存根 Json:
{
"order": [{
"from": "exampleCustomer",
"alternateOrderIdentifier": [{
"type": "Service Type",
"value": "order"
},
{
"type": "Product Type",
"value": "book"
}
],
"orderIdentifier": "order123"
}]
}
Java POJO:
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
}
Java处理方法:
@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();
}
我在回复中得到的 return 订单对象字段如下
actionCode = "Create"
alternateOrderIdentifier = null
from - null
status = "Open"
orderIdentifier = null
customerId = null
显然对象没有被正确映射。
我期待,例如CustomerId 为空,因为我还没有将它添加到 Stub Json。但我不确定为什么我会得到空值,例如orderIdentifier 和 alternateOrderIdentifier?
我确定 json 文件的路径和文件名是正确的。可能是什么问题?
class 订单的正确存根 json 应该是:
{"alternateOrderIdentifier":[{"type":"Service Type","value":"order"}],"from":"exampleCustomer","orderIdentifier":"order123"}
而不是你所拥有的...基本上你需要更改存根 json 或者你将你使用的 class 更改为 de-serialize/serialize
考虑到您的存根 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+"]";
}
}