SpringBoot项目(27)—服务端数据校验之Controller中其他参数的校验
1.编写页面
findUser.html页面
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns:th="http://www.thymeleaf.org">
<link rel="shortcut icon" href="../resources/favicon.ico" th:href="@{/static/favicon.ico}"/>
<head>
<title>finduser</title>
</head>
<body>
<form th:action="@{/user/findUser}" method="post">
<input type="text" name="username">
<input type="submit" value="ok"/>
</form>
</body>
</html>
2.对参数指定校验规则
@Controller
@RequestMapping("/user")
@Validated
public class UsersController {
@RequestMapping("findUser")
public String findUser(@NotBlank String username){
System.out.println(username);
return "ok";
}
}
在controller中的方法的参数前加上相应的校验注解@NotBlank
在controller类前加上@Validated注解,这样才能使@NotBlank生效
3.运行后会抛出异常,所以需要全局异常处理器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g4ZdEGdf-1591058433794)(E:\李小兔的Java总结\(27)-运行结果一.png)]
4.定义全局异常处理器
@Configuration//不标注这个注解,全局异常类是不能生效的
public class GlobalException implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
ModelAndView mv = new ModelAndView();
if(e instanceof ConstraintViolationException){
mv.setViewName("findUser");
}
mv.addObject("error",e.getMessage());//e.toString()也可以
return mv;
}
}
在获取异常信息时,e.getMessage()和e.toString()都可以
5.修改findUser.html页面
<input type="text" name="username"><span th:text="${error}"></span><br/>
添加异常信息的打印,这里不能使用th:errors,因为errors是捕捉BlindingResult结果集的
6.运行程序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SOTb3LjX-1591058433796)(E:\李小兔的Java总结\(27)-运行结果二.png)]
7.修改错误提示信息
方式一:在全局异常类中直接通过e.toString()或者e.getMessage()截取异常提示信息
mv.addObject("error",e.getMessage().split(":")[1]);
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pOdIC8XA-1591058433797)(E:\李小兔的Java总结\(27)-运行结果三.png)]
方式二:在controller类的相应方法中,在方法传入的参数前加上message属性
@PostMapping("/findUser")
public String findUser(@NotBlank(message = "用户名不能为空") String username){
System.out.println(username);
return "ok";
}
age = “用户名不能为空”) String username){
System.out.println(username);
return “ok”;
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y1GrAF5y-1591058433799)(E:\李小兔的Java总结\(27)-运行结果四.png)]