Как настроить Jackson в Wildfly?

У меня есть Боб сеанса со следующим методом:

@POST
@Consumes("application/x-www-form-urlencoded")
@Path("/calculate")
@Produces("application/json")
public CalculationResult calculate(@FormParam("childProfile") String childProfile,
        @FormParam("parentProfile") String parentProfile) {
...
}

возвращаемый CalculationResult не может быть сопоставлен с JSON и возникает следующее исключение:

Caused by: com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class com.test.UniqueName and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)...

как я могу настроить Jackson и его SerializationFeature в Wildfly?

2 ответов


" как я могу настроить Jackson и его SerializationFeature в Wildfly?"

вам не нужно настраивать его в Wildfly,вы можете настроить его в приложении JAX-RS. Просто используйте ContextResolver настройка ObjectMapper (см. здесь). Что-то вроде

@Provider
public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> {

    private final ObjectMapper mapper;

    public ObjectMapperContextResolver() {
        mapper = new ObjectMapper();
        mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
    }

    @Override
    public ObjectMapper getContext(Class<?> type) {
        return mapper;
    }

}

если у вас еще нет зависимости Джексона, вам это нужно, как и зависимость времени компиляции

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jackson-provider</artifactId>
    <version>3.0.8.Final</version>
    <scope>provided</scope>
</dependency>

если вы не использование сканирования для обнаружения классов ресурсов и классов поставщиков,ContextResolver должно быть обнаружено автоматически. Если вы явно регистрируете все свои ресурсы и поставщиков, вам также необходимо зарегистрировать этот. Он должен быть зарегистрирован как синглтон.


обновление

как упоминает @KozProv в комментарии, это должно быть resteasy-jackson2-provider как artifactId для зависимости Maven. -jackson- использует старые org.codehaus (Джексон 1.x), в то время как -jackson2- использует новый com.fasterxml (Джексон 2.икс.) Wildfly по умолчанию использует версию Jackson 2.


Wildfly 9

пом.в XML

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jackson2-provider</artifactId>
    <version>3.0.8.Final</version>
    <scope>provided</scope>
</dependency>

Java-класс

@com.fasterxml.jackson.annotation.JsonIgnoreProperties(ignoreUnknown = true)
public class SomePojo implements Serializable {
}