如何在 Spring Boot 中验证 JSON 请求?
Posted
技术标签:
【中文标题】如何在 Spring Boot 中验证 JSON 请求?【英文标题】:How do I validate the JSON request in Spring Boot? 【发布时间】:2019-02-11 01:46:56 【问题描述】:我想验证从客户端收到的 JSON 请求。
我尝试使用注释(@notnull, @length(min=1,max=8)
等),它工作正常,但问题是我无法获取如果它们无效将被调用的字段和消息。
虽然,我在控制台中收到一条错误消息。
约束违规列表:
[
ConstraintViolationImpl
interpolatedMessage=
'must be greater than or equal to 900000000',
propertyPath=phoneNumber,
rootBeanClass=class
com.org.infy.prime.RestWithJPA.CarrierFile,
messageTemplate=
'javax.validation.constraints.Min.message'
ConstraintViolationImpl
interpolatedMessage=
'length must be between 1 and 20',
propertyPath=accountID,
rootBeanClass=class
com.org.infy.prime.RestWithJPA.CarrierFile,
messageTemplate=
'org.hibernate.validator.constraints.Length.message'
]
请求是否有人可以帮助我,或者至少给我一个替代方法,以更有效的方式验证请求。
PS:我不想逐个字段地验证它。
【问题讨论】:
如果你在控制器中使用@Valid,你可以通过在你的方法签名中包含, BindingResult bindingResult)
来获得你想要的信息。它将包含错误的字段和错误
你能展示你的实体或模型类(来自客户端)和控制器吗?
【参考方案1】:
你可以这样做: 说这是请求类:
public class DummyRequest
@NotNull
private String code;
@NotNull
private String someField;
@NotNull
private String someOtherField;
@NotNull
private Double length;
@NotNull
private Double breadth;
@NotNull
private Double height;
// getters and setters
然后,您可以编写自己的通用验证方法,该方法将给出“不那么冗长”的约束违规消息,如下所示:
public static <T> List<String> validate (T input)
List<String> errors = new ArrayList<>();
Set<ConstraintViolation<T>> violations = Validation.buildDefaultValidatorFactory().getValidator().validate(input);
if (violations.size() > 0)
for (ConstraintViolation<T> violation : violations)
errors.add(violation.getPropertyPath() + " " + violation.getMessage());
return errors;
现在,您可以验证并检查您的请求是否包含任何错误。如果是,您可以打印它(或发回无效的请求消息)。
public static void main (String[] args)
DummyRequest request = new DummyRequest();
request.setCode("Dummy Value");
List<String> validateMessages = validate(request);
if (validateMessages.size() > 0 )
for (String validateMessage: validateMessages)
System.out.println(validateMessage);
Output:
--------
height may not be null
length may not be null
someField may not be null
someOtherField may not be null
breadth may not be null
【讨论】:
如果这能解决您的问题,请您接受答案。以上是关于如何在 Spring Boot 中验证 JSON 请求?的主要内容,如果未能解决你的问题,请参考以下文章
尝试通过 Spring Boot Rest 使用 Jackson 验证 JSON
优雅的方式来校验spring-boot的form表单参数和json的body参数合法性验证方式