Tengo un Session Bean con el siguiente método:
@POST @Consumes("application/x-www-form-urlencoded") @Path("/calculate") @Produces("application/json") public CalculationResult calculate(@FormParam("childProfile") String childProfile, @FormParam("parentProfile") String parentProfile) { ... }
El resultado de cálculo devuelto no puede asignarse a JSON y se produce la siguiente excepción:
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)...
¿Cómo puedo configurar Jackson y su SerializationFeature
en Wildfly?
“¿Cómo puedo configurar Jackson y su SerializationFeature en Wildfly?”
No necesita configurarlo en Wildfly, puede configurarlo en la aplicación JAX-RS. Simplemente use un ContextResolver
para configurar el ObjectMapper
(vea más aquí ). Algo como
@Provider public class ObjectMapperContextResolver implements ContextResolver { private final ObjectMapper mapper; public ObjectMapperContextResolver() { mapper = new ObjectMapper(); mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); } @Override public ObjectMapper getContext(Class> type) { return mapper; } }
Si aún no tiene la dependencia de Jackson, lo necesita, solo como una dependencia en tiempo de comstackción
org.jboss.resteasy resteasy-jackson-provider 3.0.8.Final provided
Si está utilizando la exploración para descubrir sus clases de recursos y clases de proveedores, ContextResolver
debe descubrirse automáticamente. Si registra explícitamente todos sus recursos y proveedores, entonces deberá registrar también este. Debería registrarse como singleton.
Como @KozProv menciona en un comentario, en realidad debería ser resteasy-jackson2-provider
como el artefacto para la dependencia de Maven. -jackson-
usa el org.codehaus
anterior (Jackson 1.x), mientras que -jackson2-
usa el nuevo com.fasterxml
(Jackson 2.x). Wildfly usa de forma predeterminada la versión Jackson 2.
Wildfly 9
pom.xml
org.jboss.resteasy resteasy-jackson2-provider 3.0.8.Final provided
Clase de Java
@com.fasterxml.jackson.annotation.JsonIgnoreProperties(ignoreUnknown = true) public class SomePojo implements Serializable { }