我在 Spring Boot 应用程序中使用 Jackson xml 版本 2.9.9。
我有一个接受 Vehicle 的控制器,它是一个具有 2 个子类的抽象类。当我从邮递员传递 JSON 数据时,我无法反序列化车辆,因为自动连接的对象映射器始终为空(我将对象映射器配置为 bean,因为我将反序列化器设置为映射器的简单模块)。
@RequestMapping(path = "/jackson", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
public void forSingleObject(@RequestBody MyModel myModel){
System.out.println("Deserialization successful");
}
MyModel.java
public class MyModel {
private String name;
private Vehicle value;
}
Vehicle.java
public abstract class Vehicle {
private String vehicleName;
}
Car.java
public class Car extends Vehicle{
private String carType;
private String carDriverName;
}
Auto.java
public class Auto extends Vehicle {
private String autoType;
private String autoDriverName;
}
ObjectMapper bean 配置
@Configuration
public class MapperConfig {
@Bean
public ObjectMapper objectMapper(){
ObjectMapper objectMapper = new ObjectMapper();//Jackson2ObjectMapperBuilder.json().build();
List<Module> modules = new ArrayList<>();
modules.add(new SimpleModule().addDeserializer(Vehicle.class, new VehicleDeserializer()));
objectMapper.registerModules(modules);
return objectMapper;
}
}
VehicleDeserializer.java
public class VehicleDeserializer extends JsonDeserializer<Vehicle> {
@Autowired
private ObjectMapper objectMapper;
@Override
public Vehicle deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
JsonNode jsonNode = jsonParser.getCodec().readTree(jsonParser);
Vehicle vehicle=null;
if (!jsonNode.findPath("carDriverName").equals("")){
vehicle = objectMapper.readValue(jsonParser, Car.class);
}else if (!jsonNode.findPath("autoDriverName").equals("")){
vehicle = objectMapper.readValue(jsonParser, Auto.class);
}
return vehicle;
}
慕桂英4014372
慕无忌1623718
达令说
相关分类