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

yizhihongxing

当使用@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日

相关文章

  • JS操作时间 – UNIX时间戳的简单介绍(必看篇)

    JS操作时间 – UNIX时间戳的简单介绍(必看篇) 在Web开发中,经常需要使用JavaScript操作时间,比如获取当前时间、格式化时间、计算时间差等。其中,UNIX时间戳是一个非常重要的概念。本文将介绍UNIX时间戳的基本含义、使用方法以及示例应用。 什么是UNIX时间戳 UNIX时间戳是自1970年1月1日00:00:00 UTC到某个时间点所经过的…

    JavaScript 2023年5月27日
    00
  • javascript结合fileReader 实现上传图片

    这里是关于JavaScript结合FileReader实现上传图片的完整攻略。 什么是FileReader? FileReader是HTML5中的一个API,用于访问本地文件并将文件内容读取到内存中。它可以读取文本、图像和音视频等资源,并将它们转换为可用的数据URL。 上传图片的基本步骤 要实现上传图片,我们需要先将选择的图片加载到内存中,然后再将它上传到服…

    JavaScript 2023年5月27日
    00
  • TypeScript中的交叉类型和联合类型示例讲解

    在TypeScript中,交叉类型和联合类型是两个非常重要的概念,它们可以让我们在代码中更好地使用类型约束。 什么是交叉类型和联合类型 在介绍示例之前,先来简要解释一下交叉类型和联合类型的概念。 交叉类型:通过将多个类型合并成一个类型来创建新的类型。交叉类型使用&符号进行连接,表示同时具有多种类型的特性。 联合类型:表示一个值可以是多种类型之一。联合…

    JavaScript 2023年6月10日
    00
  • 能够让你事半功倍的JS utils工具函数详解

    能够让你事半功倍的JS utils工具函数详解 在前端开发中,我们经常会使用许多工具函数来帮助我们简化代码、提高效率。JS Utils工具函数是一种高效的解决方案,可以让我们在编写代码时事半功倍。下面我将详细讲解JS Utils工具函数的使用方法。 引入JS Utils工具函数 要使用JS Utils工具函数,首先需要在页面中引入对应的JS文件。例如,我们可…

    JavaScript 2023年6月10日
    00
  • js鼠标按键事件和键盘按键事件用法实例汇总

    下面是“js鼠标按键事件和键盘按键事件用法实例汇总”的完整攻略。 一、鼠标按键事件 鼠标按键事件是指用户通过鼠标在网页上进行的操作,常用的鼠标按键事件有mousedown、mouseup、click、dbclick、mousemove等。 1. mousedown事件 mousedown事件在鼠标按下的时候触发,常用于实现鼠标拖动等交互效果。示例代码如下: …

    JavaScript 2023年5月28日
    00
  • js实现用户离开页面前提示是否离开此页面的方法(包括浏览器按钮事件)

    实现用户离开页面前提示是否离开此页面的方法通常使用beforeunload事件。该事件会在用户关闭或离开页面前触发。在这个事件中,你可以弹出一个提示框,询问用户是否确认离开页面。下面是具体的实现步骤: 1. 监听beforeunload事件 首先,在 JavaScript 代码中添加如下代码来监听beforeunload事件: window.addEvent…

    JavaScript 2023年6月11日
    00
  • JavaScript中使用自然对数ln的方法

    在JavaScript中,计算自然对数ln的方法有多种。本文将介绍两种常见的方法:使用Math库和手动计算。 使用Math库 Math库是JavaScript标准库之一,其中包括了常用的数学函数,如cos、sin、log等。其中包括了计算自然对数ln的函数:Math.log()。 使用Math.log()函数的方法非常简单,直接传入需要计算自然对数的数值即可…

    JavaScript 2023年5月27日
    00
  • JavaScript将数字转换成大写中文的方法

    将数字转换成大写中文是个很实用的功能,在前端开发中经常会遇到这样的需求。以下是详细的攻略: 方案一:使用中文数字字典映射 将数字转换成大写中文可以先通过一个中文数字字典进行映射,然后依次读取数字,并获取对应的中文数字,最后将其拼接成一个字符串即可。 以JavaScript为例,可以编写以下代码: function convertToChinese(num) …

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