springboot整合JSR303参数校验与全局异常处理的方法

下面我将详细讲解“springboot整合JSR303参数校验与全局异常处理的方法”的完整攻略。

一、JSR303参数校验

JSR303,又称Bean Validation,是一个JavaEE标准的框架,可以很方便地对JavaBean的字段进行校验,以保证数据的有效性和安全性。在springboot中,我们可以通过集成hibernate-validator来实现JSR303参数校验。

1、添加依赖

在pom.xml文件中添加以下依赖:

<!-- JSR303参数校验 -->
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.2.Final</version>
</dependency>

2、编写JavaBean

在JavaBean的字段上添加相应的校验注解,例如:

public class User {
    @NotNull(message = "用户名不能为空")
    private String username;

    @Size(min = 6, max = 10, message = "密码长度必须为6-10个字符")
    private String password;

    //getter和setter方法
}

3、在Controller中使用参数校验

在Controller的方法中,可以直接加上@Valid注解,表明要进行参数校验,例如:

@RestController
public class UserController {
    @PostMapping("/login")
    public String login(@Valid @RequestBody User user) {
        //处理用户登录逻辑
        return "success";
    }
}

4、处理校验不通过的异常

如果校验不通过,会抛出MethodArgumentNotValidException异常。为了更友好的提示用户错误信息,我们可以自定义全局异常处理器来处理这个异常,并返回自定义的错误信息。

二、全局异常处理

在前面的JSR303参数校验中,当校验不通过时,会抛出MethodArgumentNotValidException异常,为了更好地用户体验,我们需要对异常进行处理,并返回友好的错误信息。下面介绍如何利用@ControllerAdvice和@ExceptionHandler来实现全局异常处理。

1、编写全局异常处理器

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public String handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
        FieldError error = e.getBindingResult().getFieldError();
        String message = error.getDefaultMessage();
        return message;
    }
}

2、测试Controller

@RestController
public class UserController {
    @PostMapping("/login")
    public String login(@Valid @RequestBody User user) {
        //处理用户登录逻辑
        return "success";
    }
}

三、完整示例

我来给出一个完整的例子,包括JSR303参数校验和全局异常处理的代码。

1、添加依赖

在pom.xml文件中添加以下依赖:

<!-- JSR303参数校验 -->
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.2.Final</version>
</dependency>

<!-- 全局异常处理 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

2、编写JavaBean

public class User {
    @NotNull(message = "用户名不能为空")
    private String username;

    @Size(min = 6, max = 10, message = "密码长度必须为6-10个字符")
    private String password;

    //getter和setter方法
}

3、编写Controller和全局异常处理器

@RestController
public class UserController {
    @PostMapping("/login")
    public String login(@Valid @RequestBody User user) {
        //处理用户登录逻辑
        return "success";
    }
}

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public String handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
        FieldError error = e.getBindingResult().getFieldError();
        String message = error.getDefaultMessage();
        return message;
    }
}

4、测试

启动springboot应用程序,并使用Postman发送HTTP POST请求,请求url为“/login”,请求体为:

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

此时返回的响应体为:

用户名不能为空

另外,当请求体为:

{
    "username": "admin",
    "password": "123"
}

则返回的响应体为:

success

以上就是关于“springboot整合JSR303参数校验与全局异常处理的方法”的完整攻略,希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot整合JSR303参数校验与全局异常处理的方法 - Python技术站

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

相关文章

  • 基于maven搭建一个ssm的web项目的详细图文教程

    下面是基于Maven搭建SSM(Web)项目的详细攻略: 前置条件 JDK 1.8+ 安装并配置好环境变量 Maven 安装并配置好环境变量 IDE,比如 IntelliJ IDEA 或 Eclipse 等可选 步骤一:创建Maven项目 打开IDE,选择创建Maven项目 选择Maven-archetype-webapp模板,输入项目信息,点击创建 步骤二…

    Java 2023年5月19日
    00
  • Underscore源码分析

    Underscore源码分析完整攻略 简介 Underscore.js是JavaScript工具库中非常受欢迎的一个库,提供了一系列函数,可以简化JavaScript编程过程中的常见任务。其源码具有较高的可读性,并且拥有多种开发风格的版本,特别方便开发者进行源码的学习和理解。 如何获取源码 Underscore.js的最新版本可以通过官方网站或者Github…

    Java 2023年5月23日
    00
  • Java将Exception信息转为String字符串的方法

    Java 中将 Exception 信息转为 String 字符串的方法有多种。下面我们介绍两种主要方法。 方法1:使用 StringWriter 和 PrintWriter try { // 可能出现异常的代码 } catch (Exception e) { StringWriter sw = new StringWriter(); PrintWriter…

    Java 2023年5月27日
    00
  • Java 字符串拼接竟然有这么多姿势(收藏版)

    当我们在Java中进行字符串拼接时,有多种方式可以完成,每种方式都有其独特的优点和适用场景。以下是其中一些常用的方式: 1. “+”符号拼接字符串 使用“+”符号,可以很方便地进行字符串拼接。在代码中简单地使用“+”将字符串连接起来即可。例如: String s1 = "Hello "; String s2 = "world!&…

    Java 2023年5月26日
    00
  • JNDI具体用法详解

    JNDI具体用法详解 什么是JNDI JNDI(Java Naming and Directory Interface)是Java提供的一种机制,用于在Java应用程序中查找各种命名和目录服务。JNDI通过统一的API接口来访问不同类型的命名和目录服务。 JNDI用途 JNDI通常被用于以下几个方面: 查找Java对象 查找资源 查找配置文件 查找邮件服务 …

    Java 2023年5月20日
    00
  • SpringBoot2整合Drools规则引擎及案例详解

    Spring Boot 2整合Drools规则引擎及案例详解可以分为以下几个步骤: 第一步:引入Drools依赖 在pom.xml文件中引入Drools的依赖: <dependency> <groupId>org.drools</groupId> <artifactId>drools-core</arti…

    Java 2023年5月19日
    00
  • java迷宫算法的理解(递归分割,递归回溯,深搜,广搜)

    介绍 Java迷宫算法旨在通过编程形成一个迷宫的图形,让计算机自动地创建和解决迷宫。本文将会介绍常见的四种Java迷宫算法:递归分割算法、递归回溯算法、深度优先搜索(DFS)和广度优先搜索(BFS)算法。 递归分割算法 递归分割算法首先创建一个空的网格表示迷宫。网格中的每个单元格都代表迷宫的一个位置。分割过程会对这些位置进行标记,就像把它们铺上拼图一样。该算…

    Java 2023年5月19日
    00
  • java获取优酷视频地址示例

    获取优酷视频地址的过程,可以通过分析网页代码,找到视频的真实地址。以下是获取优酷视频地址的示例。 方法一:使用第三方库 可以使用第三方库,比如说YouGet,它可以直接获取到优酷视频的真实地址。具体操作如下: 安装YouGet pip install you-get 获取视频地址 you-get https://v.youku.com/v_show/id_X…

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