SpringBoot项目(27)---服务端数据校验之Controller中其他参数的校验

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)]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值