【问题标题】:Can we validate the presence of a request tag in a JSON payload irrespective of the value我们可以验证 JSON 有效负载中是否存在请求标签,而不管值如何
【发布时间】:2020-03-17 08:54:36
【问题描述】:

我必须验证 JSON 有效负载以检查是否通过了 Rest API 规范中提到的所有请求属性。其中一些的值可以为空。不适合使用 @NotNull、@NotEmpty 等 JSON 注释,因为它们也会验证值。

我在构造函数上尝试过@Jsoncreator。该解决方案非常适合简单的有效负载,但我不清楚在涉及嵌套对象的复杂有效负载的情况下如何使其工作。

另一个需要强调的问题是相同的对象用于 POST 和 PUT 操作负载。我只需要验证 PUT 操作。

您能否提出可行的解决方案?

对于 2 个属性的 JSON 请求 - 姓名、年龄 -

有效载荷 -

{"name" :"StackOverflow", "age" :99}

{"name" :"StackOverflow", "age" :null}

有效载荷 - {“名称”:“堆栈溢出”}

【问题讨论】:

  • 您可以从@Valid when creating objects with jackson without controller开始。但我知道您需要更多地检查有效负载中是否存在“属性”,因此必须在有效负载反序列化为POJO 之前检查它。为了使问题更清晰 - 您能否准备一些示例并提供预期的验证输出?
  • @michal ziobar - 我添加了一些样本。希望这能更好地解释要求。
  • 您想将此JSON 反序列化为POJO 还是Map?您想如何定义需要哪些字段、路径、JSON Pointer?您想使用注解并手动指定它们,还是从POJO 类中读取所有属性并检查每个属性?

标签: json spring rest spring-mvc jackson


【解决方案1】:

我认为SpringMVC可以解决您的问题。

  1. 嵌套 bean 验证

    现在我们有一个Customer 类,其中涉及嵌套类Address
    如果验证了Customer 的实例,则引用的Address 对象也将被验证,因为address 字段使用@Valid 进行注释。
public class Customer {
  @NotBlank
  private String name;
  @NotBlank
  private String email;
  //add a @Valid annotation on nested class
  @Valid
  private Address address;

  //setter and getter
}
public class Address {
  @NotBlank
  private String country;
  @NotBlank
  private String city;

  //getter and setter

}
  1. 仅验证 PUT

    您可以使用@PostMapping、@GetMapping、@PutMapping、@DeleteMapping....将 HTTP 请求映射到特定的处理程序方法。
  @PutMapping(value = "/customer")
  public String editCustomerInfo(@Valid Customer customer){
    System.out.println(customer.toString());
    return "put succeed";
  }
  @PostMapping(value = "/customer")
  public String addCustomerInfo(Customer customer){
    System.out.println(customer.toString());
    return "post succeed";
  }

【讨论】:

  • 感谢您的意见。使用 NotBlank 将验证与标签一起传递的值。我的要求是验证电子邮件标签是否始终传递,但它不需要具有如下值 - {"name" : "StavkOverflow", "email" :null}
猜你喜欢
  • 2021-12-21
  • 2017-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多