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日

相关文章

  • 浅谈java随机数的陷阱

    浅谈Java随机数的陷阱 在Java中,我们常常需要使用随机数来模拟一些随机的行为,比如生成验证码、抽奖等。然而,在使用Java随机数的过程中,我们可能会遇到一些难以预料的陷阱。本文将从以下几个方面详细讲解Java随机数的使用注意事项: 随机种子的问题 伪随机数生成器的局限性 安全随机数生成器的使用方法 随机种子的问题 在Java中,我们可以使用java.u…

    Java 2023年5月19日
    00
  • Java IO及BufferedReader.readline()出现的Bug

    关于“Java IO及BufferedReader.readline()出现的Bug”,我们需要注意以下两点: 1. Java IO 中的缓存问题 Java的IO操作是基于缓存进行的,而很多读取函数如BufferedReader. readline()是以换行符作为结束标记的,但是我们在编写代码时常常忽略了特殊情况的处理,导致出现了缓存问题,例如一次读取操作…

    Java 2023年5月27日
    00
  • IDEA 中 30 秒创建一个 Spring Cloud Alibaba 工程

    下面详细讲解如何在 IDEA 中快速创建一个 Spring Cloud Alibaba 工程的攻略: 准备工作 在开始创建项目前,我们需要为 IDEA 安装 Alibaba Cloud 插件。具体步骤如下: 打开 IDEA IDE 点击菜单栏的 “Plugins” 在搜索框中输入 “Alibaba Cloud Toolkit” 点击 “Install” 安装…

    Java 2023年5月23日
    00
  • java的Hibernate框架报错“PropertyValueException”的原因和解决方法

    当使用Hibernate框架时,可能会遇到“PropertyValueException”错误。这个错误通常是由于以下原因之一引起的: 实体对象的属性值为null:如果您的实体对象的属性值为null,则可能会出现此错误。在这种情况下,需要检查您的实体对象并确保它们正确。 实体对象的属性值不符合要求:如果您的实体对象的属性值不符合要求,则可能会出现此错误。在这…

    Java 2023年5月4日
    00
  • 游戏开发常见面试题与知识点整理总结

    游戏开发常见面试题与知识点整理总结 前言 游戏开发是一个涉及众多技术领域的综合性行业,因此在游戏开发岗位的面试中,会涉及到众多的技术领域与知识点。本篇文章将介绍游戏开发常见面试题与知识点,帮助读者了解游戏开发领域的常识,并为游戏开发岗位的应聘者提供参考。 1. 编程基础 作为一个游戏开发者,编程基础是不能缺少的部分。在面试中,经常会涉及到编程相关的面试题,需…

    Java 2023年5月19日
    00
  • java的Hibernate框架报错“AssertionFailure”的原因和解决方法

    当使用Java的Hibernate框架时,可能会遇到“AssertionFailure”错误。这个错误通常是由于以下原因之一引起的: 断言失败:如果您的断言失败,则可能会出现此错误。在这种情况下,需要检查您的代码以解决此问题。 数据库操作失败:如果您的数据库操作失败,则可能会出现此错误。在这种情况下,需要检查您的数据库操作以解决此问题。 以下是两个实例说明:…

    Java 2023年5月4日
    00
  • Java web项目启动Tomcat报错解决方案

    下面我将为您详细讲解“Java web项目启动Tomcat报错解决方案”的完整攻略。 问题描述 当我们使用IDE(例如Eclipse、IntelliJ IDEA)部署Java web项目到Tomcat中启动时,可能会遇到各种报错,例如以下报错信息: SEVERE: Error listenerStart java.lang.ClassNotFoundExce…

    Java 2023年5月19日
    00
  • PostgreSql JDBC事务操作方法详解

    PostgreSql JDBC事务操作方法详解 在Java应用程序中,使用JDBC访问PostgreSQL数据库时,我们经常需要使用事务来保证数据的一致性和可靠性。本文将详细介绍使用PostgreSQL JDBC驱动程序执行事务的方法。 驱动程序获取 我们需要先通过以下方式获取PostgreSQL JDBC驱动程序,然后将其放在Java应用程序中: Mave…

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