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