我正在使用spring boot rest控制器带有post request方法,lurl(/add(持续一个json对象, unectbody 它接受接口除了 class 。
控制器中的方法:(ivehicle是接口(
@CrossOrigin
@RequestMapping(value = "/add", method = RequestMethod.POST)
public ResponseEntity<IVehicle> addVehicle(@RequestBody IVehicle vehicle) {
vehicleService.addVehicle(vehicle);
return new ResponseEntity<IVehicle>(vehicleHttpStatus.CREATED);
}
注意: ivehicle 是一个接口。
JSON对象通过AngularJS传递:
$http({
method : 'POST',
url : '../localhost/vehicle/add',
data : $scope.vehicle,
dataType : 'json',
headers : {'Content-Type' : 'application/json; charset=utf-8'}
}).then(function(response) {
console.log( response );
}, function(error) {
console.log( error );
});
.matrix.domain.ui.ui.ivehicle:抽象类型要么需要映射到混凝土类型,具有自定义的求职者,要么包含其他类型的信息;嵌套异常是com.fasterxml.jackson.databind.jsonmappingexception:无法构造com.matrix.matrix.domain.ui.ui.iehicle的实例:抽象类型需要映射到具体类型,具有自定义的deserialializer,或者在[[资料来源:java.io.pushbackinputstream@5c46d800;线:1,列:1]
请指导我如何访问json对象$ scope.Secope.Secope。作为剩余控制器中的接口,我会感谢您。
谢谢
假设您的 ivehicle 接口可以由类表示,例如,类,除了 ivehicle interface的protface的protributes,班级只有全部除了 intributes。让我们称其为 myVehicle
将以下内容添加到您的接口:
@JsonDeserialize(as = MyVehicle.class)
public interface IVehicle
假设我们有许多接口的实现。假设IVehicle
具有实现CarVehicle
和BikeVehicle
,在这种情况下,最好在interface
级别编写Deserialiser。
ivehicle接口的实现
// interface which you will be used in @RequestBody
@JsonDeserialize(using = IVehicleDer.class)
interface IVehicle {}
@JsonDeserialize(as = CarVehicle.class)
class CarVehicle implements IVehicle {
@JsonProperty(value = "vehicle_type")
String vehicleType;
// getters and setters
}
@JsonDeserialize(as = BikeVehicle.class)
class BikeVehicle implements IVehicle {
@JsonProperty(value = "vehicle_type")
String vehicleType;
// getters and setters
}
interface IVehicle
的自定义求职者 class IVehicleDer extends JsonDeserializer<IVehicle> {
@Override
public EventI deserialize(JsonParser p, DeserializationContext ctxt)
throws IOException {
ObjectMapper mapper = (ObjectMapper) p.getCodec();
ObjectNode root = mapper.readTree(p);
if (root.has("vehicle_type") && root.get("vehicle_type").asText().equals("car")) {
return mapper.readValue(root.toString(), CarVehicle.class);
}
return mapper.readValue(root.toString(), BikeVehicle.class);
}
}
输入JSON
{
"vehicle_type": "bike"
}
JSON上方应获得 BikeVehicle
类的挑选。不要忘记在班级上写@JsonDeserialize
注释。