Как настроить Джексона в Wildfly?

У меня есть Session Bean с помощью следующего метода:

@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)...

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

2 ответа

Решение

"Как я могу настроить Джексона и его 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 в качестве артефакта для зависимости Maven. -jackson- использует старше org.codehaus (Джексон 1.x), в то время как -jackson2- использует новый com.fasterxml (Джексон 2.х). Wildfly по умолчанию использует версию The Jackson 2.

Wildfly 9

pom.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 {
}
Другие вопросы по тегам