【问题标题】:Spring request validation春季请求验证
【发布时间】:2019-08-25 17:03:10
【问题描述】:

我发现 Spring 请求验证不同于 laravel-validation。 我必须按类型和其他约束(例如最大长度)验证字段。但是当字段无法转换为 Dto 的字段类型(由 Jackson 抛出)或它太长(由 jsr-303 抛出时,Spring 会抛出不同的异常>)。

如何通过 JSON 模式验证 JSON 请求?我认为这是更好的解决方案。

【问题讨论】:

    标签: spring rest


    【解决方案1】:

    在您的 DTO 上使用 javax.validation.constraints。这是来自baeldung的示例

    import javax.validation.constraints.AssertTrue;
    import javax.validation.constraints.Max;
    import javax.validation.constraints.Min;
    import javax.validation.constraints.NotNull;
    import javax.validation.constraints.Size;
    import javax.validation.constraints.Email;
    
    public class User {
    
        @NotNull(message = "Name cannot be null")
        private String name;
    
        @AssertTrue
        private boolean working;
    
        @Size(min = 10, max = 200, message 
          = "About Me must be between 10 and 200 characters")
        private String aboutMe;
    
        @Min(value = 18, message = "Age should not be less than 18")
        @Max(value = 150, message = "Age should not be greater than 150")
        private int age;
    
        @Email(message = "Email should be valid")
        private String email;
    
        // standard setters and getters 
    }
    

    【讨论】:

    • 假设用户发送 JSON 格式为 {“email”: [1,2]}。 jsr-303 将如何处理?
    • 此代码不验证 JSON,而是验证域对象
    • 它将被映射到您的 DTO,并使用 @email 进行注释。在没有对象的情况下在 Spring 中验证 JSON,我不确定,但会对其进行一些研究。
    【解决方案2】:

    好的,我使用 java-json-tools/JSON-Schema-Validator 库来处理这个问题。 我只用一种方法创建了服务:“validate”,它接收 JsonNode 和带有 json-schema 的文件名。如果验证失败,验证器会抛出我的自定义异常,并且异常处理程序会呈现错误消息

    【讨论】:

      猜你喜欢
      • 2016-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-28
      相关资源
      最近更新 更多