小编ash*_*osh的帖子

spring data mongodb:从自定义转换器中访问默认的POJO转换器

我通过xml设置spring数据mongo自定义转换器,如下所示

<mongo:mapping-converter id="mongoConverter" db-factory-ref="mongoDbFactory">
    <mongo:custom-converters>
        <mongo:converter ref="customWriteConverter" />
        <mongo:converter ref="customReadConverter" />
    </mongo:custom-converters>
</mongo:mapping-converter>

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg ref="mongoDbFactory"/>
    <constructor-arg ref="mongoConverter"/>
</bean>

<bean id="customWriteConverter" class="package.WriteConverter" />
<bean id="customReadConverter" class="package.ReadConverter" />
Run Code Online (Sandbox Code Playgroud)

在自定义读/写转换器中,我想重新使用spring-data-mongo的默认pojo转换器将某些属性保存为子文档.

考虑一个简化的例子 -

class A {
    B b;
    String var1;
    int var2;
}

class B {
    String var3;
    String var4;
}
Run Code Online (Sandbox Code Playgroud)

我想使用customWriteConverter和处理A类的转换customReadConverter,但在我的自定义转换器中,我还想将B类的转换委托给spring-data-mongo的默认POJO转换器.

我怎样才能做到这一点?我无法成功将MongoConverter或MongoTemplate自动装入自定义转换器,因为MongoConverter/MongoTemplate bean在尝试创建自定义转换器时正在进行中.是否可以访问默认转换器并在自定义转换器中使用它?

spring spring-data spring-data-mongodb

13
推荐指数
1
解决办法
1959
查看次数

泽西岛2.6与杰克逊JSON反序列化

我的目标是进行Web调用并将返回的JSON转换为POJO.我正在尝试使用Jersey + Jackson,但在跑步时会遇到异常.

我的maven pom文件包含以下依赖项 -

<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-client</artifactId>
    <version>2.6</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>2.6</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我用来获取一些数据的代码如下 -

Client client = ClientBuilder.newBuilder()
            .register(JacksonFeature.class)
            .build();
ClientResponse response = client.target(url).request(MediaType.APPLICATION_JSON).get(ClientResponse.class);
Run Code Online (Sandbox Code Playgroud)

但是抛出以下异常 -

javax.ws.rs.ProcessingException: Error reading entity from input stream.
at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:868)
at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:785)
at org.glassfish.jersey.client.ClientResponse.readEntity(ClientResponse.java:335)
...
...
Caused by: org.codehaus.jackson.map.JsonMappingException: Can not find a deserializer for non-concrete Map type [map type; class javax.ws.rs.core.MultivaluedMap, [simple type, class java.lang.String] -> [collection type; class java.util.List, contains [simple type, class java.lang.String]]]
at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCache2(StdDeserializerProvider.java:315)
at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCacheValueDeserializer(StdDeserializerProvider.java:290)
at …
Run Code Online (Sandbox Code Playgroud)

jersey jackson jersey-client jersey-2.0

12
推荐指数
1
解决办法
3万
查看次数