这可能是一项简单的任务,但我找不到方法来完成它。基本上,我需要在 Controller 中使用 @RequestBody
注释时禁止某些参数。
这是我的模型:
@Data
public class MyModel {
private int id;
private String name;
}
我想要做的是在响应时,我希望这两个属性都序列化为 JSON,但在创建或更新时,我不希望接收 id
作为@RequestBody
反序列化的一部分。
现在,如果我在 JSON 正文中传递 id
,Spring 会初始化一个 MyModel
对象,并将其 id
设置为传递的值。
原因?在创建模型之前无法生成 ID,因此应用程序不应允许设置 ID。更新时,需要在 URL 本身中传递 ID,例如(PUT/mymodels/43
)。这有助于适当遵循 REST 原则。
那么,有什么办法可以实现这个功能吗?
更新1:
现在,我一直坚持使用请求包装器。我创建了一个新类 MyModelRequestWrapper
,仅将 name
作为其属性,并将其与 @RequestBody
注释一起使用。
最佳答案
如何执行此操作取决于您使用的 Jackson 版本。基本上可以通过在相关字段/getters/setters上组合注解@JsonIgnore和@JsonProperty来实现。
看看这里的答案:Only using @JsonIgnore during serialization, but not deserialization
关于java - 限制 @RequestBody 的 JSON 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45585374/