【发布时间】:2021-01-27 10:11:58
【问题描述】:
正如this answer 中提到的,我已经编写了如下所示的 DTO
class Car {
...
private TransmissionType transmissionType;
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "transmissionType")
private Transmission transmission;
}
@JsonSubTypes({
@JsonSubTypes.Type(value = AutomaticTransmission.class, name = "AUTOMATIC"),
@JsonSubTypes.Type(value = ManualTransmission.class, name = "MANUAL")
})
public abstract class Transmission {
}
public class AutomaticTransmission {
public Technology technology; // DCT/CVT/AMT
}
public class ManualTransmission {
public int numGears;
}
现在,在执行POST /api/v1/cars 时,用户可以发送transmissionType,但在编辑汽车时,即PATCH /api/v1/cars/{id},要求用户发送汽车类型有点奇怪,因为他们已经创建了汽车并且服务应该知道它。我在想如何在不询问用户的情况下推断出汽车的类型。
一个解决方案,我正在考虑编写一些拦截器,它将获取路径参数id 并从数据库中找出汽车的类型并以这种方式插入为transmissionType,而无需用户传递transmissionType控制器会得到它。
第二个解决方案是获取带有汽车的 json body,但使用这种方法,用户将看不到强类型,并且需要手动完成验证。
我应该选择什么方法?有没有其他更好的方法来解决这个问题?
【问题讨论】:
标签: java spring-boot jackson