我通过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在尝试创建自定义转换器时正在进行中.是否可以访问默认转换器并在自定义转换器中使用它?
我的目标是进行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)