java如何在SpringMVC中验证数字字段中的非数字输入? 1 年,5 月 Questions & Answers 156 我有一个带有一些数值属性的实体类。 诸如@NotNull、@Min和@Max等参数正在用于验证。 还需要检查用户输入是否是数字而不是字符串。 有没有一个特别的膏状物
# 1 楼答案 要实现这一目标,你可以这样做 波乔班 class PojoClass { @Getter @Setter @Max(10) @Min(1) private int data; } 控制器 @GetMapping(value = "/test") public void test(@Valid @NotNull @RequestBody PojoClass pojo){ } 现在,以下场景起作用了 案例1:有效主体 { "data" : 1 } 案例2:有效主体 { "data" : "1" } 这是因为字符串可以转换为整数,所以在内部由jackson为您转换 以下情况将失败 案例1:输入不在范围内 { “数据”:11 } 案例2:字符串不能反序列化为整数,即带有字母等的字符串 { “数据”:“1a” } 本例中的错误 Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type int from String "abc": not a valid Integer value 编辑: 根据注释,如果您需要自定义消息,您可以获得控制器建议,并以如下类似的方式重写该方法,请注意,这将适用于用户输入与POJO类不匹配的所有位置 @Override protected ResponseEntity<Object> handleHttpMessageNotReadable(HttpMessageNotReadableException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { return new ResponseEntity<>("Input is not in expected format", HttpStatus.BAD_REQUEST); }
# 2 楼答案 一,。在src目录下创建一个子目录,名称为:resources 右键单击resources子目录并创建一个名为messages的新文件。性质 将以下条目添加到消息中。属性文件 类型不匹配yourAttributeNameFromControlleryourFieldName=yourCustomErrorMessage 保存文件 在配置文件中添加以下内容:WEB-INF/yourServletName。xml <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basenames" value="resources/messages" /> </bean>" 验证完成:D
# 1 楼答案
要实现这一目标,你可以这样做
波乔班
控制器
现在,以下场景起作用了
案例1:有效主体
案例2:有效主体
这是因为字符串可以转换为整数,所以在内部由jackson为您转换
以下情况将失败
案例1:输入不在范围内 { “数据”:11 }
案例2:字符串不能反序列化为整数,即带有字母等的字符串 { “数据”:“1a” }
本例中的错误
编辑:
根据注释,如果您需要自定义消息,您可以获得控制器建议,并以如下类似的方式重写该方法,请注意,这将适用于用户输入与POJO类不匹配的所有位置
# 2 楼答案
一,。在src目录下创建一个子目录,名称为:resources
右键单击resources子目录并创建一个名为messages的新文件。性质
将以下条目添加到消息中。属性文件
类型不匹配yourAttributeNameFromControlleryourFieldName=yourCustomErrorMessage
保存文件
在配置文件中添加以下内容:WEB-INF/yourServletName。xml
验证完成:D