如何在Jersey REST服务方法参数上使用jackson mixin

时间:2017-02-20 06:21:21

标签: java jersey jackson

我让杰克逊反序列化了我的一个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。感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我猜你可能没有以正确的方式将杰克逊与泽西融为一体。查看Jersey’s doc on Jackson。在您的项目中,应该有一个实现ContextResolver<ObjectMapper>的类。此类中ObjectMapper返回的getContext(Class<?> type)实例由Jersey的REST端点使用。您可以使用您的混音配置ObjectMapper