java - 限制 @RequestBody 的 JSON 属性

标签 java json spring-mvc jackson

这可能是一项简单的任务,但我找不到方法来完成它。基本上,我需要在 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/

相关文章:

javascript - THREE.JS 从 blender 中导出 JSON 模型(包括纹理)

Tomcat-Maven 401 错误 : Cannot invoke Tomcat manager

java - setVisibility(View.INVISIBLE) 后 ImageView 仍然可见

Java 异常错误 - Sqlite preparedStatement.setBlob

c# - 按位交换操作

java - 信任 java Websocket 客户端中的所有证书

json - 从纬度和经度检索国家坐标

javascript - 如何在 Node.js 中的变量中存储 JSON 响应?

spring - Spring MVC中如何通过返回自定义错误页面来全局处理404异常?

java - 如何让Spring访问下拉框值