【发布时间】:2019-08-25 17:03:10
【问题描述】:
我发现 Spring 请求验证不同于 laravel-validation。 我必须按类型和其他约束(例如最大长度)验证字段。但是当字段无法转换为 Dto 的字段类型(由 Jackson 抛出)或它太长(由 jsr-303 抛出时,Spring 会抛出不同的异常>)。
如何通过 JSON 模式验证 JSON 请求?我认为这是更好的解决方案。
【问题讨论】:
我发现 Spring 请求验证不同于 laravel-validation。 我必须按类型和其他约束(例如最大长度)验证字段。但是当字段无法转换为 Dto 的字段类型(由 Jackson 抛出)或它太长(由 jsr-303 抛出时,Spring 会抛出不同的异常>)。
如何通过 JSON 模式验证 JSON 请求?我认为这是更好的解决方案。
【问题讨论】:
在您的 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
}
【讨论】:
好的,我使用 java-json-tools/JSON-Schema-Validator 库来处理这个问题。 我只用一种方法创建了服务:“validate”,它接收 JsonNode 和带有 json-schema 的文件名。如果验证失败,验证器会抛出我的自定义异常,并且异常处理程序会呈现错误消息
【讨论】: