栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2021-1-17 SpringMVC 全局异常处理与数据校验

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-1-17 SpringMVC 全局异常处理与数据校验

一、全局异常处理

项目中,可能会抛出多个异常,我们不可以直接将异常的堆栈信息展示给用户:

    用户体验不好不安全

针对异常,可以自定义异常处理。
比如说文件超限:

可以使用@ControllerAdvice 注释类,这是一个增强版Controller,主要用来做增强版数据处理

@ControllerAdvice
//在该注解下定义方法处理异常
public class ExceptionHandle {
    @ExceptionHandler(Exception.class) //处理什么异常
    public ModelAndView fileuploadSizeLimit(Exception e){

        ModelAndView mv=new ModelAndView("error");
        mv.addObject("error",e.getMessage());
        return mv;
    }
}
二、数据校验

服务端校验why?
理解客户端校验和服务端校验各自的目的。

    客户端校验 主要是为了提高用户体验。B/S架构中,用户可以方便地拿到请求地址,然后直接发送请求,传递非法参数。服务端校验 有效保证数据安全与完整性
1. 普通校验

加入依赖:

        
            org.hibernate
            hibernate-validator
            6.1.0.Final
        

配置bean:

    
        
    

driven修改:

    

model下定义Student:
eg.注解
@Size(min=2,max=10,message = “学生名称长度介于2-10之间”)

package org.kk.fileupload.model;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;


public class Student {
    //对于model,可以通过注解增加校验规则
    @NotNull
    @Size(min=2,max=10)
    private String username;
    @NotNull
    private Integer id;
    @Email
    private String email;
    @Size(max=150)
    private  Integer age;
}

写对应Controller:
注意点:接收的Student对象需要有注解@Validated,通过 BindingResult result可以查看异常信息

message的定义也可以使用properties文件:
首先先解决编码问题——setting改UTF-8

放在resources文件夹下:

key可以随便定义

student.id.notnull=id 不能为空
student.name.notnull=name 不能为空
student.name.size=学生名称长度介于2-10之间

那么student类可以改为:

    //对于model,可以通过注解增加校验规则
    @NotNull(message = "{student.name.notnull}")
    @Size(min=2,max=10,message = "{student.name.size}")
    private String name;
    @NotNull(message = "{student.id.notnull}")
    private Integer id;
    @Email
    private String email;
    @Size(max=150)
    private  Integer age;

配置bean:

    
          
            
                classpath:MyMessage 
            
        
        
        
    

validatorFactoryBean里面也要增加属性:

    
        
        
    
2. 分组校验

 //对于model,可以通过注解增加校验规则
    @NotNull(message = "{student.name.notnull}",groups = {ValidationGroup1.class, ValidationGroup2.class})
    @Size(min=2,max=10,message = "{student.name.size}",groups = ValidationGroup1.class)
    private String name;
    @NotNull(message = "{student.id.notnull}",groups = ValidationGroup2.class)
    private Integer id;
    @Email
    private String email;
    @Size(max=150)
    private  Integer age;

在group1里面,只会校验name.notnull,name.size。。。
所以校验时要指定分组(controller中指定)@Validated(ValidationGroup1.class)

public class StudentController {
    @PostMapping("/student")
    @ResponseBody
    public void addStudent(@Validated(ValidationGroup1.class) Student student, BindingResult result)
    {
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/709260.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号