2015-02-07 136 views
0

我试图反序列化使用杰克逊用下列JSON有效载荷:杰克逊JSON反序列化

[{ 
    "owner" : "345MWyh7w4hY98W6", 
    "url" : "http://www.google.com", 
    "items" : [{ 
    "createdAt" : 1342099411415, 
    "amount" : 1, 
    "note" : "item 1", 
    "product" : "car" 
    }, { 
    "createdAt" : 1342100231111, 
    "amount" : 4, 
    "note" : "item 2", 
    "product" : "wheels" 
    }], 
    "createdAt" : 1342096943777, 
    "title" : "Car order", 
    "description" : "car order", 
    "id" : "98hw85Y945e6U358" 
}] 

我使用下面的代码进行反序列化:

ObjectMapper mapper = new ObjectMapper().configure(
     DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 

List<Order> result = null; 
try { 
    result = mapper.readValue(jsonString,new TypeReference<List<Order>>() { }); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

不过,我得到以下错误:

org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor aroundWriteTo 
SEVERE: MessageBodyWriter not found for media type=application/json, type=class org.glassfish.jersey.client.InboundJaxrsResponse, genericTyp 
e=class org.glassfish.jersey.client.InboundJaxrsResponse. 
Feb 06, 2015 8:14:45 PM org.glassfish.jersey.filter.LoggingFilter log 

该类Orders是由RAML - > JAX-RS maven插件生成的,它没有零参数构造函数。除了修改生成的类以添加零参数构造函数之外,是否有任何方法可以执行此反序列化?

+0

检查这个http://stackoverflow.com/questions/23601842/jersey-messagebodywriter-not-found-for-media-type-application-json-type-class 你有MessageBodyWrite没有发现异常。 – 2015-02-07 04:33:20

回答

0

能够解决问题。我创建了一个包装DTO在命令如下:

@XmlRootElement 
public class OrderDTO { 

    private List<Order> orderList; 

    public List<Order> getOrderList() { 
     return orderList; 
    } 

    public void setOrderList(List<Order> orderList) { 
     this.orderList = orderList; 
    } 

    public void addOrder(Order order){ 
     orderList.add(order); 
    } 

    public OrderDTO() { 
     super(); 
     orderList = new ArrayList<Order>(); 
    } 
} 

在这里,我能够加入零参数的构造函数。现在它工作:)。