如何在Wildfly中配置Jackson

如何在Wildfly中配置Jackson

本文介绍了如何在Wildfly中配置Jackson?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个会话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?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-12 20:09