问题描述
我有一个会话Bean,其中包含以下方法:
I've got a Session Bean with the following method:
@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,并发生以下异常:
The returned CalculationResult cannot be mapped to JSON and the following exception occurs:
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)...
如何在Wildfly中配置Jackson及其 SerializationFeature
?
How can I configure Jackson and its SerializationFeature
in Wildfly?
推荐答案
您不需要在Wildfly中配置它,您可以在JAX-RS应用程序中对其进行配置。只需使用配置 ObjectMapper
(更多)。类似
You don't need to configure it in Wildfly, you can configure it in the JAX-RS applciation. Just use a ContextResolver
to configure the ObjectMapper
(see more here). Something like
@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;
}
}
如果您还没有杰克逊依赖,你需要它,就像编译时依赖
If you don't already have the Jackson dependency, you need that, just as a compile-time dependency
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson-provider</artifactId>
<version>3.0.8.Final</version>
<scope>provided</scope>
</dependency>
如果您使用扫描来发现资源类和提供程序类,应自动发现ContextResolver
。如果您明确注册了所有资源和提供程序,那么您还需要注册此资源和提供程序。它应该注册为单身。
If you are using scanning to discover your resource classes and provider classes, the ContextResolver
should be discovered automatically. If you explicitly registering all your resource and providers, then you'll need to register this one also. It should be registered as a singleton.
正如@KozProv在评论中提到的,它实际上应该是 resteasy-jackson2-provider
作为Maven依赖项的artifactId。 -jackson -
使用较旧的 org.codehaus
(Jackson 1.x),而 -jackson2 -
使用新的 com.fasterxml
(Jackson 2.x)。 Wildfly默认使用The Jackson 2版本。
As @KozProv mentions in a comment, it should actually be resteasy-jackson2-provider
as the artifactId for the Maven dependency. -jackson-
uses the older org.codehaus
(Jackson 1.x), while the -jackson2-
uses the new com.fasterxml
(Jackson 2.x). Wildfly by default uses The Jackson 2 version.
这篇关于如何在Wildfly中配置Jackson?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!