首页 > 其他分享 >整合springboot

整合springboot

时间:2022-10-07 22:57:13浏览次数:60  
标签:return springboot 校验 public 整合 class append String

  • 案例1
@RestController
public class UserInfoHandler {

    /**
     * 编程式校验
     * @param userInfo
     * @return
     */
    @GetMapping("/addUser")
    public  String addUser(UserInfo userInfo) {
        List<String> result = ValidationUtil.valid(userInfo);
        if (result.size() > 0) {
            System.out.println(result);
            return "校验不成功";
        }else {
            return "添加成功";
        }
    }

}
  • 案例2
@RestController
public class UserInfoHandler {

    /**
     * springmvc 环境中校验一般可以声明式,这种更简单,springmvc也更推荐
     * @param userInfo
     */
    @GetMapping("/addUser2")
    public  String addUser2(@Valid UserInfo userInfo, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) { // 判断是不是有不满足约束的
            List<ObjectError> allErrors = bindingResult.getAllErrors();
            for (ObjectError error : allErrors) {
                System.out.println(error.getObjectName() +"::" + error.getDefaultMessage());
            }
            // 获取没通过校验的字段详情
            List<FieldError> fieldErrors = bindingResult.getFieldErrors();
            for (FieldError fieldError : fieldErrors) {
                System.out.println(fieldError.getField() + ":" +fieldError.getDefaultMessage()
                +",当前没通过校验规则的值是:"+fieldError.getRejectedValue());
            }
            return "校验不通过";
        }
        return "添加成功";
    }

}
  • 案例3:分组校验
@RestController
public class UserInfoHandler {

    /**
     * 测试@Validated的分组校验
     * @param userInfo
     * @param bindingResult
     * @return
     */
    @GetMapping("/addUser3")
    public String addUser3(@Validated(value = {UserInfo.Add.class, Default.class})
                                        UserInfo userInfo, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) { // 判断是不是有不满足约束的
            List<ObjectError> allErrors = bindingResult.getAllErrors();
            for (ObjectError error : allErrors) {
                System.out.println(error.getObjectName() +"::" + error.getDefaultMessage());
            }
            // 获取没通过校验的字段详情
            List<FieldError> fieldErrors = bindingResult.getFieldErrors();
            for (FieldError fieldError : fieldErrors) {
                System.out.println(fieldError.getField() + ":" +fieldError.getDefaultMessage()
                        +",当前没通过校验规则的值是:"+fieldError.getRejectedValue());
            }
            return "校验不通过";
        }
        return "添加成功";
    }

}
  • 案例4:异常处理
@ControllerAdvice
public class RoadJavaControllerAdvice {
    // @Validated 注解写在方法上的时候会报这个异常
    @ExceptionHandler(BindException.class)
    @ResponseBody
    public String handleEx(BindException e) {
        List<FieldError> fieldErrors = e.getFieldErrors();
        StringBuilder sb = new StringBuilder("这是RoadJavaControllerAdvice,");
        for (FieldError fe: fieldErrors) {
            sb.append("属性:").append(fe.getField())
                    .append("校验不通过,原因:").append(fe.getDefaultMessage())
                    .append(";");
        }
        return sb.toString();
    }
}

@RestController
public class UserInfoHandler {
    @GetMapping("/addUser4")
    public String addUser4(@Validated(value = {UserInfo.Add.class, Default.class})
                                   UserInfo userInfo) {
        return "addUser4添加成功";
    }
}
  • 案例5
@ControllerAdvice
public class RoadJavaControllerAdvice {

    // @Validated 注解写在方法上的时候会报这个异常
    @ExceptionHandler(BindException.class)
    @ResponseBody
    public String handleEx(BindException e) {
        List<FieldError> fieldErrors = e.getFieldErrors();
        StringBuilder sb = new StringBuilder("这是RoadJavaControllerAdvice,");
        for (FieldError fe: fieldErrors) {
            sb.append("属性:").append(fe.getField())
                    .append("校验不通过,原因:").append(fe.getDefaultMessage())
                    .append(";");
        }
        return sb.toString();
    }

    // @Validated 注解写在类上的时候会报这个异常
    @ExceptionHandler(ConstraintViolationException.class)
    @ResponseBody
    public List<String> handleEx(ConstraintViolationException e) {
        Set<ConstraintViolation<?>> set = e.getConstraintViolations();
        List<String> list = set.stream().map(v -> "属性:" + v.getPropertyPath() +
                ",属性的值:"
                + v.getInvalidValue() + ",校验不通过的提示信息:" + v.getMessage()
                +",消息模板:"+v.getMessageTemplate()) // el表达式还没被解析成值的时候
                .collect(Collectors.toList());
        return list;
    }

    // 处理所有的异常
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public String handleEx(Exception e) {
        return e.getMessage();
    }

}

@RestController
@Validated // 表示整个类都启用校验,如果碰到入参含有bean validation 注解的话,就会自动校验
public class UserInfoHandler {
    @GetMapping("/getByName")
    public  String getByName(@NotNull String name) {
        return name+"ok";
    }
}

标签:return,springboot,校验,public,整合,class,append,String
From: https://www.cnblogs.com/chniny/p/16767410.html

相关文章

  • springboot~Money类型在序列化时遇到的问题与解决
    在java扩展包里,有这样一个包,它可以描述货币类型,它说币种和金额组成,可以应用在任何复杂的场合里,这个对象结构如下:{"price":{"amount":1799.99,"curren......
  • SpringBoot集成MyBatis(详细)
    前言JPA和MyBatis,JPA是SpringBoot官方的,前身就是著名的三大框架之一的Hibernate,好处是不用手写SQL(当然它也支持手写,如果必要的话),而MyBatis灵活性非常高,但是需要手写SQL语......
  • SpringBoot整合Sharding-JDBC案例
    数据表t_user表为需要分库分表的表,user为其他表,user放在nestdr1中。对数据库实行读写分离nestdr1为从数据库。 查询  代码 pom<!--web-->......
  • Springboot 之 Filter 实现 Gzip 压缩超大 json 对象
    简介在项目中,存在传递超大json数据的场景。直接传输超大json数据的话,有以下两个弊端占用网络带宽,而有些云产品就是按照带宽来计费的,间接浪费了钱传输数据大导致......
  • spring boot 整合 redis
    springboot整合redispom.xmlmaven依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifa......
  • SpringBoot整合Junit、MyBatis
                 ......
  • Prometheus 快速入门教程(七):SpringBoot 实现自定义指标监控
    上篇文章我们已经可以在Grafana上看到对应的SpringBoot应用信息了,通过这些信息我们可以对SpringBoot应用有更全面的监控。但是如果我们需要对一些业务指标做监控,我们......
  • SpringBoot 实现文件上传
    参考:Javaspringboot进阶教程文件上传功能实现后端代码编写常见错误分析与解决在Service业务层接口中增加一个上传文件的方法因为文件并不是上传至数据库中,所以......
  • springboot整合prometheus和grafana
    准备springBoot服务pom引入依赖<!--集成micrometer,将监控数据存储到prometheus--><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-r......
  • SpringBoot应用自定义logback日志
    概述默认情况下,SpringBoot内部使用logback作为系统日志实现的框架,将日志输出到控制台,不会写到日志文件。如果在application.properties或application.yml配置,这样只能配置简......