springboot项目中的dto的参数校验及统一异常处理的简单使用

springboot项目中的dto的参数校验以及统一异常处理

依赖包

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
        <version>2.7.3</version>
      </dependency>

dto类中的注解

根据下图可以看到有这么多的注解可以使用,就不一一列举了,挑两个常用的演示下
在这里插入图片描述
来一段dto中的代码

@Data
@ToString
public class UmsMemberRegisterDTO {
    // 可以限制住该参数的位数
    @Size(min = 6, max = 16, message = "用户名6位到16位")
    private String username;
    @Size(min = 8, max = 16, message = "密码位数为8~16")
    private String password;
    private String icon;
    // 校验email格式
    @Email
    private String email;
    // 不能为空
    @NotEmpty
    private String nickName;
}

controller中的修改

只需要将参数中添加@Valid注解

// 注册
    @PostMapping("/register")
    public ResultWrapper register(@RequestBody @Valid UmsMemberRegisterDTO umsMemberRegisterDTO){
        return umsMemberService.insertUmsMember(umsMemberRegisterDTO);
    }

其实现在已经起作用了,但是前端接收到的信息是报错信息如图:
在这里插入图片描述
说明第一个注解硬起作用了,返回400,bad request,那如何将这样的异常捕捉并且返回呢,继续往下看

创建validate异常处理器

创建一个处理器ValidateHandler 继承ResponseEntityExceptionHandler 重写handleMethodArgumentNotValid方法,如下:

@RestControllerAdvice
public class ValidateHandler extends ResponseEntityExceptionHandler {

    @Override
    protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
                                                                  HttpHeaders headers,
                                                                  HttpStatus status,
                                                                  WebRequest request) {
        StringBuilder stringBuilder = new StringBuilder();
        for (FieldError fieldError: ex.getBindingResult().getFieldErrors()){
            String defaultMessage = fieldError.getDefaultMessage();
            // 将异常字段的信息提取
            stringBuilder.append("  ").append(defaultMessage);
            break;
        }
        // 这段注释是对返回值进行了统一处理,为了简化,这段代码注释了,直接将异常信息封装到ResponseEntity返回
        // return new ResponseEntity(ResultWrapper.builder().code(301).msg(stringBuilder.toString()).build(),HttpStatus.OK);
        return new ResponseEntity(stringBuilder.toString(),HttpStatus.OK);

现在的返回值就是一段字符串,如图:
在这里插入图片描述
当然也可以自己将结果封装下返回给前端,就是上面注释哪段代码,如图:
在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Boot 项目结构DTO 是指数据传输对象,用于在不同层之间传递数据。DTO 通常包含与业务相关的数据和属性,但不包含任何业务逻辑。在 Spring Boot 项目DTO 通常位于 controller 和 service 层之间,用于将数据从 controller 传递到 service 层,或者从 service 层传递到 controller。DTO 的命名通常以业务实体名称为前缀,例如 UserDTO、OrderDTO 等。在 Spring Boot 项目DTO 可以使用注解来进行数据校验和转换,例如 @Valid、@NotNull、@JsonProperty 等。 ### 回答2: 在SpringBoot项目架构DTO(Data Transfer Object)是一个重要的组成部分。DTO是用于传输数据的对象,相当于一个数据容器,它通常用于在不同层之间传递数据或者不同服务之间传输数据。 SpringBoot建议DTO应该与领域对象分离,因为领域对象(Domain Object)通常是面向数据存储的,而DTO则是面向服务接口的。DTO应该包含服务接口所需的所有参数和返回值,但不应该包含任何额外的业务逻辑。 DTO通常在以下场景使用: 1. 数据传输:DTO主要用于数据传输,当我们需要传输多个字段时,DTO可以帮助我们整合这些字段,方便数据传输。 2. 接口定义:在服务接口,我们可以使用DTO定义接口参数和返回值,这样可以让接口定义更加清晰。 3. 异步处理:在异步处理DTO可以作为异步任务的参数传递给异步方法,这样可以把处理逻辑与DTO分离,提高代码的可读性和维护性。 在SpringBoot项目,一般的DTO结构包含以下几个部分: 1. DTO类:DTO类通常包含服务接口所需的所有参数和返回值。DTO类应该采用JavaBean的形式,即包含私有属性、公共访问器和无参构造函数等。 2. Controller类:Controller类的方法通常用于处理请求和响应。在方法,我们可以使用DTO作为参数或者返回值,用于接收或者返回数据。 3. Service类:Service类通常用于处理业务逻辑。在Service类,我们可以使用DTO作为参数或者返回值,用于传递数据和处理结果。 4. Repository类:Repository类通常用于访问数据库或者其他数据存储系统。在Repository类,我们可以使用DTO作为参数或者返回值,用于传递数据和处理结果。 综上所述,DTOSpringBoot项目具有重要的作用,它可以帮助我们整合数据,定义接口,异步处理和分离业务逻辑。为了实现更好的代码可读性和可维护性,我们应该采用规范的DTO结构,把DTO和领域对象分离,使代码更易于管理。 ### 回答3: 在Spring Boot项目DTO(Data Transfer Object)是一个非常常见的概念,它主要用于在不同层之间传输数据和对象。在通常的情况下,我们会将DTO定义在Controller层和Service层之间,以便将业务逻辑和数据分离开来。Spring Boot项目结构通常包含以下几个部分: 1. Controller层:Controller层主要负责接收请求、处理请求和返回响应。在Controller层,我们通常会使用DTO来将请求和响应对象进行封装,以便进行参数传递和返回结果。 2. Service层:Service层主要负责业务逻辑的实现。在Service层,我们通常会使用DTO来封装业务数据,并将其传递给DAO层或其他Service层进行处理。 3. DAO层:DAO层主要负责数据访问和持久化操作。在DAO层,我们通常会使用DTO来封装数据库操作所需要的参数。 4. Entity层:Entity层主要定义数据库表和实体类之间的映射关系。在Entity层DTO的作用比较有限,主要是用于数据传输。 综上所述,DTOSpring Boot项目是非常重要的一部分,它可以方便地进行数据传输和对象封装,从而实现业务逻辑和数据分离的目的。同时,在DTO的定义和使用过程,我们应该注意保持良好的封装性和可复用性,使得代码更加清晰易懂。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值