web-dev-qa-db-ja.com

Wildflyでジャクソンを設定する方法は?

次のメソッドでセッション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でジャクソンとそのSerializationFeatureを設定するにはどうすればよいですか?

16
sebplorenz

「WildflyでJacksonとそのSerializationFeatureを設定するにはどうすればよいですか?」

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

}

Jackson依存関係をまだ持っていない場合は、コンパイル時の依存関係と同様に、それが必要です。

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jackson-provider</artifactId>
    <version>3.0.8.Final</version>
    <scope>provided</scope>
</dependency>

スキャンを使用してリソースクラスとプロバイダークラスを検出している場合、ContextResolverは自動的に検出されます。すべてのリソースとプロバイダーを明示的に登録する場合は、これも登録する必要があります。シングルトンとして登録する必要があります。


更新

@KozProvがコメントで言及しているように、これは実際にはMaven依存関係のArtifactIdとしてresteasy-jackson2-providerである必要があります。 -jackson-は古いorg.codehaus(Jackson 1.x)を使用し、-jackson2-は新しいcom.fasterxml(Jackson 2.x)を使用します。 Wildflyはデフォルトでジャクソン2バージョンを使用します。

24
Paul Samsotha

ワイルドフライ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 {
}
6
Igor Vuković