2 回答
![?](http://img1.sycdn.imooc.com/54584cde0001d19202200220-100-100.jpg)
TA贡献1873条经验 获得超9个赞
您可以通过实现自定义反序列化器类来实现。
试试这个:
String json = null;//your request json
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addDeserializer(User.class,new UserDeserialzer());
User user = objectMapper.registerModule(module).readValue(json,User.class);
解串器类:
public class UserDeserialzer extends JsonDeserializer<User>{
@Override
public User deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
JsonNode value = new ObjectMapper().readTree(p.getText());
User user = new User();
try {
Field field = user.getClass().getDeclaredField("users");
field.setAccessible(true);
field.set(user,value.get("users"));
}catch (Exception ex){
}
return user;
}
}
对于 Spring-boot 应用程序:
添加此 bean 以在全局范围内反序列化。
@Bean
public Jackson2ObjectMapperBuilder configureObjectMapper() {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addDeserializer(User.class,new UserDeserialzer());
objectMapper.registerModule(module);
builder.configure(objectMapper);
return builder;
}
![?](http://img1.sycdn.imooc.com/545864490001b5bd02200220-100-100.jpg)
TA贡献1817条经验 获得超6个赞
如果您更喜欢在创建 JAXB 对象时使用 Apache CXF,您可以使用 xjc 插件在生成对象期间自动创建 setter-getter 方法。这种方式对你来说可能非常实用。
我遇到了同样的问题,通过这种方式,我在不更改代码的情况下解决了问题。
您可以将以下部分添加到您的 pom 文件中:
<build>
<plugins>
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${version.apache.cxf}</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${basedir}/src/main/java</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/resources/wsdl/sample.wsdl</wsdl>
<wsdlLocation>classpath:wsdl/sample.wsdl</wsdlLocation>
<extraargs>
<extraarg>-xjc-Xbg</extraarg>
<extraarg>-xjc-Xcollection-setter-injector</extraarg>
</extraargs>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.apache.cxf.xjcplugins</groupId>
<artifactId>cxf-xjc-boolean</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>org.andromda.thirdparty.jaxb2_commons</groupId>
<artifactId>collection-setter-injector</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
添加回答
举报