我让杰克逊反序列化了我的一个java类的问题,这个问题来自第三方API,它没有默认的构造函数。为了克服这个问题,我使用JacksonMixIn并且它运行正常。但问题是我在Jersey API上实现了一个REST端点,它接受上述类之一作为从客户端到服务器端的方法参数。因此,当反序列化它会引发我跟随错误。
No suitable constructor found for type [simple type, class net.rcarz.jiraclient.Priority]: can not instantiate from JSON object (need to add/enable type information?)
at [Source: org.glassfish.jersey.message.internal.EntityInputStream@558e8ae; line: 1, column: 454]...
受影响的班级
public class TestCaseVO{
private Priority priority;
private User reporter;
}
public class Priority {
protected Priority(RestClient restclient, JSONObject json) {
super(restclient);
if (json != null)
deserialise(json);
}
}
这是用于将客户端与服务器进行通信的对象
public class myDataObject{
private String userName;
private List<TestCaseVO> testCases;
//Getter and setters
}
泽西岛终点
@POST
@Path("/bug")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public TestCaseVO attachBugForTestCase(myDataObject myDataObject){
// when deserializing to MyDataObject it thorows above error
//Handle logic
}
客户端代码段
var myDataObject= {
"testCases": [$scope.bug.TestCaseVO],
"userName":userName}
angularJsMyService.Bug.attachBug({},myDataObject)
.$promise.then(function(data){
...
}
我的问题是,在杰克逊反序列化之前,我如何在REST方法参数上使用Jackson mixin。感谢任何帮助。
答案 0 :(得分:1)
我猜你可能没有以正确的方式将杰克逊与泽西融为一体。查看Jersey’s doc on Jackson。在您的项目中,应该有一个实现ContextResolver<ObjectMapper>
的类。此类中ObjectMapper
返回的getContext(Class<?> type)
实例由Jersey的REST端点使用。您可以使用您的混音配置ObjectMapper
。