@validated注解异常返回JSON值方式

当使用@Validated注解对方法或参数进行参数校验时,如果发现参数校验不通过,可以使用异常返回JSON值方式来返回异常信息,以帮助客户端更好地处理错误信息。

以下是实现@Validated注解异常返回JSON值方式的完整攻略:

1. 添加依赖

在Maven项目的pom.xml文件中添加以下依赖:

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

2. 添加@RequestParam注解

在需要进行参数校验的方法或参数上添加@RequestParam注解,并设置对应的校验规则,例如:

public void testParam(@RequestParam @NotBlank(message = "用户名不能为空") String username,
                      @RequestParam @NotBlank(message = "密码不能为空") String password) {
    // 方法实现代码
}

3. 添加异常处理器

在Spring Boot应用中,可以通过编写异常处理器来捕获和处理抛出的异常。在本例中,需要编写一个异常处理器来处理参数校验异常,并返回JSON格式的异常信息。

@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
        // 获取异常信息
        BindingResult bindingResult = e.getBindingResult();
        List<ObjectError> allErrors = bindingResult.getAllErrors();
        // 构建返回结果
        Map<String, Object> result = new LinkedHashMap<>();
        result.put("code", "400");
        result.put("message", "参数校验失败");
        Map<String, Object> errors = new LinkedHashMap<>();
        allErrors.forEach(error -> errors.put(((FieldError)error).getField(), error.getDefaultMessage()));
        result.put("errors", errors);
        return result;
    }
}

4. 测试

使用POSTMAN等工具发送一个POST请求,请求体中包含了不合法的参数,例如:

{
    "username": "",
    "password": ""
}

这时会返回以下JSON格式的异常信息:

{
    "code": "400",
    "message": "参数校验失败",
    "errors": {
        "username": "用户名不能为空",
        "password": "密码不能为空"
    }
}

以上就是使用@Validated注解异常返回JSON值方式的完整攻略。

示例1:

首先定义实体类TestDTO如下:

import lombok.Data;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;

@Data
public class TestDTO {
    @NotBlank(message = "用户名不能为空")
    private String username;
    @NotBlank(message = "密码不能为空")
    @Length(min = 6,max = 32,message = "密码长度为6~32位")
    private String password;
    @NotBlank(message = "邮箱不能为空")
    @Email(message = "邮箱格式不正确")
    private String email;
}

现在我们使用该实体类进行参数校验,修改第二步中的代码,并使用@RequestBody注解接收请求体,如下:

public void testParam(@RequestBody @Validated TestDTO testDTO) {
    // 方法实现代码
}

该处理方式与第二步相比,只有@RequestBody和@Validated注解不同。

示例2:

下面我们将讨论如何使用@Validated注解对map进行参数校验。

首先定义一个Map类型的输入参数,如下:

public void testParam(@RequestParam @Validated Map<String,String> map) {
    // 方法实现代码
}

这样就可以使用@Validated注解校验map中的所有参数了。例如,如果我们加入下面的校验规则:

@NotBlank(message = "map中键值对value不能为空")

那么,当map中有一个value为null或空串时,就会抛出异常信息“map中键值对value不能为空”。

以上就是针对两个示例的@Validated注解异常返回JSON值方式的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:@validated注解异常返回JSON值方式 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • javascript 日期工具汇总

    JavaScript 日期工具汇总 日期是我们在 Web 开发中经常接触到的数据类型。在 JavaScript 中,我们可以通过内置的日期对象(Date)来处理和操作日期数据。此外,也有很多第三方库和工具,可以帮助我们更方便地处理日期数据。 在本文中,我们将介绍一些常用的 JavaScript 日期工具,并给出使用示例说明。 1. 内置 Date 对象 Da…

    JavaScript 2023年5月27日
    00
  • js实现文字选中分享功能

    下面是 JS 实现文字选中分享功能的完整攻略: 1. 监听选中事件 要实现文字选中分享功能,首先需要监听用户选择文本的操作。可以使用 window.getSelection() 方法获取用户选中的文本,然后判断选中文本的长度是否大于 0,来确认用户是否已经选中了文本。以下是示例代码: // 监听用户选择文本操作 document.addEventListen…

    JavaScript 2023年6月11日
    00
  • 手把手教你如何排查Javascript内存泄漏

    为了让大家更好地了解如何排查JavaScript内存泄漏问题,以下是一份完整的攻略。 什么是JavaScript内存泄漏 JavaScript内存泄漏是指在JavaScript代码执行过程中,未使用的内存被长时间占用不释放的情况。这会导致内存溢出,进而影响代码的性能。 如何排查JavaScript内存泄漏 JavaScript内存泄漏问题很常见,但是很难被察…

    JavaScript 2023年6月10日
    00
  • js网页实时倒计时精确到秒级

    JS网页实时倒计时精确到秒级可以分为以下几步: 1. 获取目标时间戳 首先,我们需要获取目标时间戳,也就是倒计时结束时的时间,可以用new Date()方法获取,将目标时间转化为可计算的时间戳: let targetTime = new Date(‘2022/1/1 00:00:00’).getTime(); 2. 获取当前时间戳 然后,我们需要获取当前时间…

    JavaScript 2023年5月27日
    00
  • Javascript无参数和有参数类继承问题解决方法

    Javascript无参数和有参数类继承问题解决方法 在Javascript中,实现类的继承是非常方便的。但是在实践中,我们往往会遇到一些继承问题,其中常见的问题是我们从父类中继承了一些属性和方法,但是我们希望在子类中传入一些特定的参数来修改这些属性和方法。在这种情况下,我们需要解决Javascript无参数和有参数类继承问题。 解决无参数类继承问题的方法 …

    JavaScript 2023年5月27日
    00
  • 如何使用JS在HTML中自定义字符串格式化

    要在HTML中自定义字符串格式化,我们通常使用JavaScript来实现。以下是使用JS在HTML中自定义字符串格式化的完整攻略: 1. String.prototype.format 方法 Javascript 的字符串对象 String.prototype 中提供了一个 format 方法,可以通过占位符的方式快速格式化字符串。 代码示例: const …

    JavaScript 2023年5月19日
    00
  • javascript实现查找数组中最大值方法汇总

    JavaScript实现查找数组中最大值方法汇总 对于数组中的最大值查找,JavaScript 提供了多种实现方式,这里将介绍最常用的三种方法: 方法一: for循环遍历数组,逐一比较大小 该方法的实现思路是通过 for 循环遍历整个数组,不断更新当前最大值。代码示例如下: function getArrayMax(arr) { let max = arr[…

    JavaScript 2023年6月10日
    00
  • vue实现路由跳转动态title标题信息

    下面是vue实现路由跳转动态title标题信息的完整攻略: 使用vue-router管理路由 在vue中,我们可以使用vue-router管理路由,对应的npm包名为vue-router。使用vue-router能够方便的实现从页面跳转到另外一个页面,同时在页面跳转时可以动态修改页面的标题信息。具体步骤如下: 安装vue-router 在项目中使用vue-r…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部