2017-02-20 29 views
1

У меня была проблема десериализации Джексона одного из моих классов java, который исходит от стороннего API, который не имеет конструкторов по умолчанию. Чтобы преодолеть эту проблему, я использовал JacksonMixIn, и она работала но проблема заключалась в том, что у меня есть конечная точка REST, реализованная на API Джерси, которая принимается одним из вышеперечисленных классов как параметр метода с клиентской стороны на сторону сервера. Поэтому, когда десериализация это бросает мне следующую ошибку.Как использовать jackson mixin на параметрах метода Джерси 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: [email protected]; 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 
    } 

Джерси Endpoint

@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 до Джексона десериализации them.Appreciate любой помощи.

ответ

1

Я думаю, вы, вероятно, не интегрировали Джексона с Джерси в правильном направлении. Выезд Jersey’s doc on Jackson. В вашем проекте должен быть класс, реализующий ContextResolver<ObjectMapper>. Экземпляр ObjectMapper, возвращенный getContext(Class<?> type) в этом классе, используется конечными точками REST Джерси. Вы можете настроить этот ObjectMapper с помощью вашего Mix-in.

 Смежные вопросы

  • Нет связанных вопросов^_^