@Validated的使用

 出于对前端传递参数校验是否为空或者是否是空字符串,传统的if()else{}方法过于难受,每次都需要占用大量的代码,很不优雅,因此搜索找到@Validated用法来优化代码。

一、使用步骤

  • 导入依赖(springboot 2.3之前的集成在spring-boot-starter-web里了,所以不需要额外引入包;springboot 2.3之后需要引入 spring-boot-starter-validation)
  • 在实体类、controller、方法放上注解;
  • 全局异常处理器,捕获异常、处理异常、封装返回值;

二、代码示例 

maven:

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

 2.3版本之前的不需要加,如果是2.3版本这里会有,我的是2.7.5所以需要单独引入。

实体类:添加@NotNull、@NotEmpty注解。

package com.qiyue.domain.dto;

import lombok.Data;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;


@Data
public class MissionInsertDTO {
    /**
     * 任务标题
     */
    @NotNull(message = "任务标题不能为空")
    @NotEmpty(message = "任务标题传值为空,重新传值")
    private String missionTitle;

    /**
     * 任务描述
     */
    @NotNull(message = "任务描述不能为空")
    @NotEmpty(message = "任务描述传值为空,重新传值")
    private String missionDesc;

    /**
     * 任务类型
     */
    @NotNull(message = "任务类型不能为空")
    private int missionType;

    /**
     * 任务开启单元
     */
    @NotNull(message = "任务开启单元不能为空")
    private Integer missionUnit;

    /**
     * 任务开启课程
     */
    @NotNull(message = "任务开启课程不能为空")
    private Integer missionLesson;

    /**
     * 方便对任务的管理
     */
    @NotNull(message = "方便对任务的管理不能为空")
    private Integer missionStatus;
}

controller+方法

在controller上加

@Validated

在方法的传参加

@Valid
package com.qiyue.controller;


import com.qiyue.domain.dto.MissionInsertDTO;
import com.qiyue.domain.dto.PageDTO;
import com.qiyue.domain.po.Mission;
import com.qiyue.domain.query.PageQuery;
import com.qiyue.result.Result;
import com.qiyue.service.MissionService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

/**
 * <p>
 * 陪练任务表 前端控制器
 * </p>
 *
 * @author LCJ
 * @since 2024-06-29
 */
@Slf4j
@Validated
@RestController
@RequestMapping("/mission")
public class MissionController {

    @Autowired
    private MissionService missionService;

    @PostMapping
    public Result insertMission(@RequestBody @Valid MissionInsertDTO missionInsertDTO) {
        log.info("missionInsertDTO:{}", missionInsertDTO);
        return missionService.insertMission(missionInsertDTO);
    }

    @GetMapping
    public Result<PageDTO<Mission>> queryMissionPage(PageQuery pageQuery) {
        log.info("pageQuery:{}", pageQuery);
        return missionService.queryMissionPage(pageQuery);
    }

}

全局异常处理器,捕获异常、处理异常、封装返回值;

校验如果有问题,会抛出异常DefaultHandlerException

在GlobalExceptionHandler去处理并封装返回就行;

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<Map<String, Object>> handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) {
        Map<String, Object> errorMap = new HashMap<>();
        errorMap.put("code", 400);
        errorMap.put("message", "参数验证错误");
        errorMap.put("errors", ex.getBindingResult().getFieldErrors().stream()
                .collect(Collectors.toMap(
                        FieldError::getField,
                        FieldError::getDefaultMessage
                )));
        return ResponseEntity.badRequest().body(errorMap);
    }

测试

如果是空返回结果

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值