Как настроить Джексона в 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 {
}