首页 > 编程语言 >解锁Java编程新高度!用validate注解做校验,让你的代码更高效、更安全!

解锁Java编程新高度!用validate注解做校验,让你的代码更高效、更安全!

时间:2024-11-08 15:20:00浏览次数:7  
标签:Java Spring 校验 springframework Valid org import validate 注解

在Java中,@Valid注解通常用于验证对象的属性。它通常与Spring框架一起使用,以自动触发对Java Bean的验证。以下是如何使用@Valid注解进行校验的详细步骤和示例代码:

1. 添加依赖

首先,确保你的项目中包含了Spring Boot的starter-web依赖,因为我们需要用到Spring的验证功能。

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

2. 创建实体类并使用验证注解

在你的实体类中,你可以使用JSR-303/JSR-380标准中的注解来声明字段的验证规则。例如,使用@NotNull, @Size, @Min, @Max等注解。

import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

public class User {
    @NotNull(message = "Name cannot be null")
    @Size(min = 2, max = 30, message = "Name must be between 2 and 30 characters")
    private String name;

    @NotNull(message = "Age cannot be null")
    @Min(value = 18, message = "Age should not be less than 18")
    private Integer age;

    // standard getters and setters
}

3. 在控制器中使用@Valid注解

在你的Spring MVC控制器中,你可以在方法参数前使用@Valid注解,这样Spring就会在调用该方法之前自动验证传入的对象。如果验证失败,它将抛出一个异常。

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

@RestController
@RequestMapping("/users")
public class UserController {

    @PostMapping("/")
    public ResponseEntity<String> addUser(@Valid @RequestBody User user) {
        return new ResponseEntity<>("User is valid", HttpStatus.OK);
    }
}

4. 处理验证错误

当验证失败时,Spring会抛出一个MethodArgumentNotValidException。你可以通过编写一个全局异常处理器来捕获这个异常,并返回一个更友好的错误响应。

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.HashMap;
import java.util.Map;

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<Map<String, String>> handleValidationExceptions(MethodArgumentNotValidException ex) {
        Map<String, String> errors = new HashMap<>();
        ex.getBindingResult().getAllErrors().forEach((error) -> {
            String fieldName = ((FieldError) error).getField();
            String errorMessage = error.getDefaultMessage();
            errors.put(fieldName, errorMessage);
        });
        return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST);
    }
}

总结

通过以上步骤,你可以在Spring应用中使用@Valid注解来进行数据验证。这不仅可以帮助保持数据的完整性,还可以提供更好的用户体验,因为它可以即时反馈输入错误。

标签:Java,Spring,校验,springframework,Valid,org,import,validate,注解
From: https://blog.csdn.net/LA1245780/article/details/143625486

相关文章

  • 最新版Java面试八股文(基础篇)
    1.面向对象和面向过程的区别面向过程:是分析解决问题的步骤,然后用函数把这些步骤一步一步地实现,然后在使用的时候一一调用则可。性能较高,所以单片机、嵌入式开发等一般采用面向过程开发面向对象:是把构成问题的事务分解成各个对象,而建立对象的目的也不是为了完成一个个步骤,......
  • JAVA同城服务上门家政服务家政派单系统源码微信小程序+微信公众号+APP+H5
    JAVA同城服务上门家政服务家政派单系统源码,是一款专为家政服务行业设计的全方位解决方案,它深度整合了微信小程序、微信公众号、APP以及H5四大主流平台,为用户和服务商之间搭建了一座高效、便捷的沟通桥梁。在功能性方面,该系统源码提供了全面的家政服务项目分类,包括日常保洁、......
  • JAVA同城服务上门家政服务家政派单系统源码微信小程序+微信公众号+APP+H5
    JAVA同城服务上门家政服务家政派单系统源码,是一款专为家政服务行业设计的全方位解决方案,它深度整合了微信小程序、微信公众号、APP以及H5四大主流平台,为用户和服务商之间搭建了一座高效、便捷的沟通桥梁。在功能性方面,该系统源码提供了全面的家政服务项目分类,包括日常保洁、......
  • Java复习39(PTA)
    出勤统计分数15全屏浏览切换布局作者 大数据2021单位 山东科技大学某公司现需要统计员工出勤次数,具体要求如下:输入样例:MarkTomIvorMarkIvorMarkJackend输入样例解释:每行表示某天出勤的员工名单,以空格间隔。end表示输入结束输出样例:Mark3Ivor2......
  • JAVA同城服务上门家政服务家政派单系统源码微信小程序+微信公众号+APP+H5
    JAVA同城服务上门家政服务家政派单系统源码,是一款专为家政服务行业设计的全方位解决方案,它深度整合了微信小程序、微信公众号、APP以及H5四大主流平台,为用户和服务商之间搭建了一座高效、便捷的沟通桥梁。在功能性方面,该系统源码提供了全面的家政服务项目分类,包括日常保洁、......
  • JAVA全民到家同城服务按摩养生系统源码支持公众号+H5
    JAVA全民到家同城服务预约按摩养生系统源码,深度整合了同城按摩养生行业的优质服务资源,通过公众号与H5端的全面支持,为用户提供了一个功能强大、实用便捷的健康服务平台。在功能性方面,该系统源码不仅提供了丰富的按摩养生服务项目,如中式按摩、泰式按摩、足疗养生等,还允许用户根......
  • Java 面试用什么项目?全是商场秒杀 RPC,我吐了
    看了几百份简历,真的超过90%的小伙伴的项目是商城、RPC、秒杀、论坛、外卖、点评等等烂大街的项目,人人都知道这些项目烂大街了,但大部分同学还是得硬着头皮做,没办法,网络上能找到的、教程比较完善的就这些项目了,做的话好歹有个项目,不做那就真能写学校做的垃圾学生管理系统了。我深......
  • javascript中的this
    在JavaScript中,this关键字的值取决于它被使用的上下文。它并不像其他编程语言中的this总是指向对象的实例,而是可能指向不同的对象。以下是几种常见的this的用法及其指向的内容:全局上下文在全局范围(即没有在任何函数或对象内)中,this指向全局对象。在浏览器中,这通常是window对象。......
  • Java 重新认识String类
    在Java中,以下代码的输出是什么?为什么?Strings1="Hello";Strings2="Hello";Strings3=newString("Hello");System.out.println(s1==s2);//输出:trueSystem.out.println(s1==s3);//输出:false解析String类在Java中,String类是一个非常特殊且重要的类,用于表......
  • java计算机毕业设计电子购物商城(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着互联网技术的迅猛发展和广泛普及,人们的生活方式发生了巨大的改变。在商业领域,电子购物逐渐成为主流的消费模式。近年来,电子商务市场规模不断......