限制 @RequestBody 的 JSON 属性

Posted

技术标签:

【中文标题】限制 @RequestBody 的 JSON 属性【英文标题】:Restrict JSON attributes for @RequestBody 【发布时间】:2018-01-17 00:43:35 【问题描述】:

这可能是一项简单的任务,但我找不到方法。基本上,我需要在控制器中使用 @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 注释一起使用。

【问题讨论】:

【参考方案1】:

您如何执行此操作取决于您使用的 Jackson 版本。基本上可以通过在相关字段/getters/setters 上的注释 @JsonIgnore 和 @JsonProperty 的组合来实现。

在这里查看答案:Only using @JsonIgnore during serialization, but not deserialization

【讨论】:

以上是关于限制 @RequestBody 的 JSON 属性的主要内容,如果未能解决你的问题,请参考以下文章

使用Spring的@RequestBody注解,无法映射首字母大写属性的踩坑记录

Spring-boot @RequestBody JSON 到带有日期反序列化示例的对象?

Spring中的注解 @RequestBody和@ResponseBody的使用和区别

自定义spring参数注解 - 打破@RequestBody单体限制

requestbody注解

RequestBody没有正确映射有对象列表的对象。