如何在 Wildfly 中配置 Jackson?

Posted

技术标签:

【中文标题】如何在 Wildfly 中配置 Jackson?【英文标题】:How to configure Jackson in Wildfly? 【发布时间】:2015-04-03 03:56:42 【问题描述】:

我有一个会话 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)...

如何在 Wildfly 中配置 Jackson 及其 SerializationFeature

【问题讨论】:

【参考方案1】:

野蝇 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 

【讨论】:

【参考方案2】:

“如何在 Wildfly 中配置 Jackson 及其 SerializationFeature?”

您不需要在 Wildfly 中配置它,您可以在 JAX-RS 应用程序中配置它。只需使用ContextResolver 来配置ObjectMapper(查看更多here)。类似的东西

@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;
    
    

如果您还没有 Jackson 依赖项,则需要它,就像编译时依赖项一样

<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 依赖项的 artifactId。 -jackson- 使用旧的 org.codehaus (Jackson 1.x),而 -jackson2- 使用新的 com.fasterxml (Jackson 2.x)。 Wildfly 默认使用 The Jackson 2 版本。

【讨论】:

以上是关于如何在 Wildfly 中配置 Jackson?的主要内容,如果未能解决你的问题,请参考以下文章

Jackson marshal/unmarshal 在 jaxrs wildfly 15 中表现不同

一文详解JackSon配置信息

如何在 WildFly 中配置压缩日志?

如何在wildfly服务器中以编程方式热重载静态资源(如xhtml)以获取爆炸战争中存在的库

如何在 Wildfly 10 中配置数据源?

如何在 WildFly 中配置 EJB WebServices(入耳式)