如何在 Spring Boot 中将请求正文中的一些属性作为可选属性

nic*_*gkd 0 java dto spring-boot

我的控制器中有一个 HTTP 类型 POST 的 REST 端点(/用户),该 REST 端点接受具有以下属性的用户 RequestBody:

{
  name: 'abc',
  address: 'xyz',
  phoneNo: '123',
  age: '12',
  email: 'xyz@gmail.com'  
}
Run Code Online (Sandbox Code Playgroud)

我的要求是,age应该是完全可选的,就像用户调用 REST 端点而不age在有效负载中指定(关键字)一样,它应该像魅力一样工作。例如

{
  name: 'abc',
  address: 'xyz',
  phoneNo: '123',
  email: 'xyz@gmail.com'  
}
Run Code Online (Sandbox Code Playgroud)

因此,如果用户没有在age有效负载中指定关键字,我就会执行默认的业务逻辑,另一方面,如果用户指定age关键字及其值,那么我就会有一些其他逻辑需要处理。

仅供参考 - 我创建了一个 DTO 类,其中Users声明了所有属性,其外观如下

@Data
class Users{
 @NotNull
 private String name;
 @NotNull
 private String address;
 @NotNull
 private String phoneNo;
 private String age;
 @NotNull
 private String email;  
 
}
Run Code Online (Sandbox Code Playgroud)

因此,如果有人为我提供一种处理问题陈述的方法,我将不胜感激。

谢谢,外星人!

Man*_*H M 5

在 DTO 类上使用注释@JsonIgnoreProperties(ignoreUnknown = true),这样,如果 RequestBody 没有该属性,则该属性将被忽略。

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
class Users {
  .......
  .......
}
Run Code Online (Sandbox Code Playgroud)