@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日

相关文章

  • Android studio 混淆+打包+验证是否成功

    下面是关于“Android studio 混淆+打包+验证是否成功”的完整攻略。 1. 什么是混淆 混淆(Obfuscation)是一种通过变更代码名称,使得代码难以理解和阅读的技术。在Android开发中,混淆可以有效的防止反编译和代码盗用。Android Studio为我们提供了混淆功能,我们可以在打包前进行混淆操作。 2. 如何进行混淆 2.1 启用混…

    JavaScript 2023年6月11日
    00
  • JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)

    我们来详细讲解一下JavaScript定时器SetTimeout之定时刷新窗口和关闭窗口的攻略。 首先,什么是setTimeout呢?setTimeout() 是 JavaScript 中的一个函数,它可以在一定的时间间隔之后执行一次函数或者是多次执行一个函数。这里的时间间隔是以毫秒为单位。 接下来,我们来说明一下如何使用setTimeout函数来定时刷新窗…

    JavaScript 2023年6月11日
    00
  • js数组实现权重概率分配

    下面是我对“js数组实现权重概率分配”的完整攻略: 概述 在编写JS代码时,经常会需要进行权重概率分配,即根据给定的权重,随机分配某个值。例如,我们可能需要根据一组商品的销量,按照销量大小进行分配,让销量高的商品出现的概率更大一些,从而提高展示效果。 JS中的数组提供了一种方便的实现方法。我们可以根据权重创建一个数组,数组的每个元素代表对应权重下的值,然后随…

    JavaScript 2023年5月27日
    00
  • javaScript嗅探执行神器-sniffer.js

    我来为你详细讲解一下“JavaScript嗅探执行神器-sniffer.js”的完整攻略。 什么是JavaScript嗅探执行神器-sniffer.js? “JavaScript嗅探执行神器-sniffer.js”是一个轻量级的JavaScript库,它可以通过监听window对象上的事件或者重写window对象上的方法来获取并记录JavaScript代码的…

    JavaScript 2023年5月27日
    00
  • JAVA使用Gson解析json数据实例解析

    简介 JSON是一种轻量级的数据交换格式,很多时候我们需要在Java中使用JSON格式进行数据的传递或解析,在Java中使用Gson库可以方便地实现JSON的解析和生成。 Gson是Google提供的Java解析JSON的库,它可以将JSON字符串转化为Java对象,也可以将Java对象转化为JSON字符串。 基本概念 在使用Gson进行JSON解析时,需要…

    JavaScript 2023年6月11日
    00
  • JS遍历页面所有对象属性及实现方法

    JS遍历页面所有对象属性及实现方法 在JavaScript中,对象是一个非常重要的概念,通过对象可以将多种类型的数据(属性)和方法(函数)组合到一起,实现对数据的封装和操作。在前端开发中,遍历页面中所有的对象属性是非常常见的需求,本文将介绍如何实现这一功能。 1. for…in循环 for…in循环是JavaScript中遍历对象属性的一种基本方法,…

    JavaScript 2023年5月27日
    00
  • Javascript中的async函数详解

    Javascript中的async函数详解 Introduction 在Javascript中,async函数是一个让我们可以使用异步的方法来执行本来以同步方式执行的代码的函数。 它使我们能够避免回调地狱并轻松处理异步代码的结果。在本文中,我们将详细讲解async函数,并说明如何使用它们。 Async函数和Promise ES6中带来了很多新的概念和特性,如…

    JavaScript 2023年5月27日
    00
  • C#获取本地IP的四种方式示例详解

    下面是针对“C#获取本地IP的四种方式示例详解”的完整攻略。 1. 前言 有时我们需要获取本地机器的IP地址。但是,如果我们不知道如何获取IP地址,就无法对本地IP进行任何操作。在本教程中,我们将学习使用C#编程语言获取本地IP地址的4个方法。 2. 方法一 [GetHostName] 以下是使用C#语言获取本地IP地址的第一个例子: string myHo…

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