2

Я пытаюсь получить аннотации Джексона, работающие в приложении JBoss RestEasy на сервере EAP 6.1.1. Чтобы быть более точным, я хочу получить JacksonPolymorphicDeserialization, работая через аннотацию, как сделано here.jackson jboss eap6.1.1 аннотации не работают

Теперь это кажется простым, но по какой-то причине он не работает. я получил следующий код:

package example.model; 

import com.fasterxml.jackson.annotation.JsonSubTypes; 
import com.fasterxml.jackson.annotation.JsonTypeInfo; 

@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@type",visible = true) 
@JsonSubTypes({@JsonSubTypes.Type(value = ImplementedRequest.class, name = "implementedrequest")}) 
public abstract class Request { 

} 

и осуществление абстрактного класса:

@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@type", visible = true) 
public class ImplementedRequestextends Request { 
    @NotEmpty 
    private Person applicant; 

    private List<AbstractApplicationPart> applications; 

} 

Я создал конечную точку, которая делает запрос и обрабатывает запрос:

@Path("serviceRequest") 
@Named("RequestResource") 
@RequestScoped 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
@ValidateRequest 
@IgnoreMediaTypes(MediaType.APPLICATION_JSON) 
public class RequestResource { 
    public Boolean saveRequest(@Valid Request request, @Context HttpServletRequest req) throws JAXBException, AnError { 
//Some awesome processing happens here 
} 
public Response getDummyData() { 
// Creates and fills the ImplementedRequestextends 
return result; 
} 
} 

сейчас Я также сделал некоторую конфигурацию и убедился, что загружаю модули Jackson в Jboss с развертыванием войны. И убедитесь, что в моем пом у меня такая же версия, как и у модулей.

Я ожидаю теперь, что если я делаю вызов я получаю что-то вроде:

{ 
    "applicant": { "name":"Dummy data", "age":31}, 
    "applications": [ {"sport":"soccer"},{"sport":"judo"} ] 
} 

Я ожидал получить @type имя с полем implementedrequest. Это моя первая попытка; в конечном итоге я также хочу, чтобы абстрактный массив работал так. Но я даже не могу заставить эту работу работать.

+0

Возможный дубликат [Невозможно перейти на Джексон 2.1.4, Джерси, игнорируя аннотации] (http://stackoverflow.com/questions/15436268/unable-to-upgrade-to-jackson-2-1-4- jersey-ignoring-the-annotations) – SQB

ответ

1

Так что в конце концов я понял, что пошло не так.

import com.fasterxml.jackson.annotation.JsonSubTypes; 
import com.fasterxml.jackson.annotation.JsonTypeInfo; 

Есть проблема. У Jackson есть 2 версии и оба работают, но по умолчанию для JBoss EAP6.1.1 есть ветвь 1.X, доступная под org.codehaus. Проблема обоих методов работает в ядре. Позднее он перешел в другую ветку и артефакт.

+1

Также см. http://stackoverflow.com/q/15436268/2936460 – SQB

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