自学内容网 自学内容网

@Valid校验前端参数

1、导入依赖。(springmvc的stater-web和json依赖也需要添加,此处先不列举)

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

2、使用示例:
(1)接收客户端参数实体类dto

package com.example.dto;

import com.example.pojo.SysJob;
import lombok.Data;

import javax.validation.constraints.NotBlank;

@Data
public class SysJobDto {
    @NotBlank(message = "不能为空")
    private String pageNum;
    private String pageSize;
    private SysJob sysJob;
}

(2)controller添加@Valid触发验证

    @PostMapping("/getJob")
    public ResponseEntity<String> getJob(@Valid @RequestBody SysJobDto sysJobDto){
        return new ResponseEntity<>("User is valid", HttpStatus.OK);
        //return iSysJobService.getJobList(sysJobDto.getSysJob(),sysJobDto.getPageNum(),sysJobDto.getPageSize());
    }

(3)这里还有一个问题需要解决(校验错误,这里没办法自动把@notBlank的message传递给前端。需要添加一个全局异常处理器,将错误信息返回给前端)
解决方式:添加两个类。
全局异常处理器类:GlobalExceptionHandler.java
返回的异常信息实体类:ErrorResponse.java

GlobalExceptionHandler.java

package com.example.utils;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;

import java.util.HashMap;
import java.util.Map;

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public ResponseEntity<ErrorResponse> handleValidationExceptions(MethodArgumentNotValidException ex) {
        Map<String, String> errors = new HashMap<>();
        ex.getBindingResult().getAllErrors().forEach(error -> {
            String fieldName = ((FieldError) error).getField();
            String errorMessage = error.getDefaultMessage();
            errors.put(fieldName, errorMessage);
        });

        ErrorResponse errorResponse = new ErrorResponse(
                HttpStatus.BAD_REQUEST.value(),
                "Validation failed",
                System.currentTimeMillis(),
                errors
        );

        return new ResponseEntity<>(errorResponse, HttpStatus.BAD_REQUEST);
    }
}

ErrorResponse.java

package com.example.utils;

import lombok.Data;

import java.util.Map;
@Data
public class ErrorResponse {
    private int status;
    private String message;
    private long timestamp;
    private Map<String, String> errors;

    public ErrorResponse(int status, String message, long timestamp, Map<String, String> errors) {
        this.status = status;
        this.message = message;
        this.timestamp = timestamp;
        this.errors = errors;
    }

    // getters and setters
}



原文地址:https://blog.csdn.net/qq_44895567/article/details/140517072

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!