限制@RequestBody

时间:2017-08-09 08:25:47

标签: java json spring-mvc jackson

这可能是一项简单的任务,但我找不到办法。基本上,我需要在控制器中使用@RequestBody注释时禁用一些参数。

这是我的模特:

@Data
public class MyModel {
  private int id;
  private String name;
}

我想要做的是在回复时,我希望将这两个属性序列化为JSON,但在创建或更新时,我宁愿不接收id作为{的一部分{ {1}}反序列化。

现在,如果我在JSON正文中传递@RequestBody,Spring会初始化id对象,并将MyModel设置为传递的值。

原因?在创建模型之前无法生成ID,因此应用程序不应允许设置ID。在更新时,ID需要在URL本身中传递,例如(id)。这有助于适当地遵循REST原则。

那么,有没有办法实现这个功能?

更新1:

现在,我很难使用请求包装器。我创建了一个新类PUT /mymodels/43,其中只有MyModelRequestWrapper作为其属性,并将其与name注释一起使用。

1 个答案:

答案 0 :(得分:2)

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

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