JSR 303学习

发布于:2024-10-12 ⋅ 阅读:(125) ⋅ 点赞:(0)

系列文章目录

JavaSE
基础知识、数据类型学习 万年历项目 代码逻辑训练习题
代码逻辑训练习题 方法、数组学习 图书管理系统项目
面向对象编程:封装、继承、多态学习 封装继承多态习题 常用类、包装类、异常处理机制学习
集合学习 IO流、多线程学习 仓库管理系统JavaSE项目
员工管理系统、多表查询、反射实现DBHelper学习 DML、DDL、数据库对象学习
JavaWeb
网络编程、各种标签、CSS学习 ECMAScript、BOM学习 DOM、jQuery学习
Servlet、JSP、Cookie、Ajax学习 融资管理系统JavaWeb项目
框架
MyBatis框架学习 逆向工程、Spring框架IOC、AOP学习 SpringMVC框架学习
SpringBoot框架学习 招聘网站框架项目 Vue介绍、窗体内操作、窗体间操作学习
Vue路由配置、网络请求访问框架项目、element组件介绍学习 标准管理系统Vue项目
微服务
Linux安装、Nginx反向代理、负载均衡学习 Docker学习 Jenkins学习
Nexus学习 Spring Security学习 RabbitMQ学习
Redis学习 MongoDB学习 MongoDB学习
Nacos学习 Spring Session学习 Spring Gateway学习
JSR 303学习 OpenFeign学习 Hystrix学习


前言

本文我们要讲述:
JSR 303
在下攸攸太上。


一、JSR 303介绍

1. JSR介绍

JSR是Java Specification Requests的缩写,意为Java规范请求。它是由Java社区制定的一种规范制定流程,用于制定和更新Java平台的规范、API和相关技术标准。JSR的制定过程是由Java社区的成员共同参与和协作完成的,其中包括Java开发者、组织、厂商和其他利益相关者。

JSR的制定包括以下步骤:
1、提出:制定组织或个人向Java社区提出制定新的规范或修改现有规范的需求。
2、制定:制定组织或个人负责制定并提交规范的草案,然后由专家组进行讨论和审查。
3、审查:经过审查后,规范的终稿将被提交给Java社区的成员进行最终的投票表决。
4、采纳:如果规范的终稿被通过,它将成为正式的Java规范,得到采纳并实施。
通过JSR的制定,Java社区可以确保Java平台的发展是开放和协作的,各种新的技术和标准可以得到规范化并得到广泛支持和应用。

2. JSR 303介绍

JSR 303是Java规范中定义的Bean Validation规范,用于在Java应用程序中进行数据验证和约束。JSR 303提供了一种基于注解的方式来定义对象的验证规则,可以在运行时对对象进行验证,确保其符合预先定义的规则。

在JSR 303中,可以使用一系列内置的验证注解来定义对象的验证规则,例如@NotNull、@Size、@Min、@Max等。开发者还可以通过编写自定义的验证注解来扩展验证规则。

JSR 303的主要目的是简化数据验证的实现,提高代码的可维护性和可读性。通过使用JSR 303,开发者可以在对象上定义验证规则,并使用验证器来验证对象是否符合这些规则。这样可以避免编写大量重复的验证代码,使得数据验证变得更加简单和高效。JSR 303已经成为Java EE平台的一部分,并得到了广泛的应用。

二、PostMan官网下载

PostMan官网下载
点一下就能下载了,下载完点一下就能用了,超级方便!!

三、代码实现JSR 303

1. 创建Maven项目

在这里插入图片描述
项目结构:
在这里插入图片描述

2. 添加依赖

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.7.RELEASE</version>
    </parent>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.6.13</spring-boot.version>
        <jwt.version>0.7.0</jwt.version>
        <fastjson.version>1.2.60</fastjson.version>
        <spring-cloud-alibaba.version>2.0.3.RELEASE</spring-cloud-alibaba.version>
        <spring-cloud.version>Finchley.SR2</spring-cloud.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--json-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson.version}</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <classifier>exec</classifier>
                </configuration>
            </plugin>
        </plugins>
    </build>

3. 创建application.yml配置文件

server:
  port: 100

4. 创建User实体类

package com.jjy.entry;

import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.springframework.stereotype.Component;
import javax.validation.constraints.NotEmpty;

@Component
@Data
public class User {
    private String id;
    // @NotNull   name为空地址
    @NotEmpty  //name为空值,空双引
    private String name;
    @Length(min = 6,max = 10)
    private String password;
}

5. 创建DemoController控制器

package com.jjy.controller;

import com.jjy.entry.User;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/demo")
public class DemoController {

    @PostMapping
    public String testJsr303(@Validated @RequestBody User user){
        return "ok";
    }
}

6. 创建启动类

package com.jjy;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootMain {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootMain.class,args);
    }
}

7. 启动项目

在这里插入图片描述
发送如下Post请求:

{
    "name":"zhangsan",
    "password":"12345678"
}	

出现成功
在这里插入图片描述
发送如下Post请求:

{
    "name":"zhangsan",
    "password":"128"
}

出现提示密码长度不符合规范
在这里插入图片描述
发送如下请求:

{
    "password":"12345678"
}

出现提示用户名不能为空
在这里插入图片描述

四、规范返回值格式

1. 创建ResultCode工具类

package com.jjy.util;

public enum ResultCode {

    SUCCESS(0, "请求成功"),
    ERROR(1, "请求失败"),
    ;

    private int code;
    private String message;

    ResultCode(int code, String message) {
        this.code = code;
        this.message = message;
    }

    public int getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }
}

2. 创建Result工具类

package com.jjy.util;


import lombok.Data;
import java.util.HashMap;
import java.util.Map;

@Data
public class Result {

    private Integer code;

    private String message;

    private Map<String, Object> map = new HashMap<>();

    private Result() {
    }

    public static Result ok() {
        Result r = new Result();
        r.setCode(ResultCode.SUCCESS.getCode());
        r.setMessage(ResultCode.SUCCESS.getMessage());
        return r;
    }

    public static Result error() {
        Result r = new Result();
        r.setCode(ResultCode.ERROR.getCode());
        r.setMessage(ResultCode.ERROR.getMessage());
        return r;
    }

    public Result put(String key, Object value) {
        map.put(key, value);
        return this;
    }

    public Object get(String key) {
        return map.get(key);
    }

}

3. 创建ValidationExceptionAdvice工具类

package com.jjy.utils;

import com.jjy.utils.Result;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
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.List;
import java.util.Map;


@RestControllerAdvice("com.jjy.controller")
public class ValidationExceptionAdvice {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public Result handlerMethodArgumentNotValidException(MethodArgumentNotValidException e) {
        BindingResult bindingResult = e.getBindingResult();
        List<FieldError> fieldErrors = bindingResult.getFieldErrors();
        Map<String, Object> map = new HashMap<>();
        for (FieldError fieldError : fieldErrors) {
            map.put(fieldError.getField(), fieldError.getDefaultMessage());
        }
        return Result.error().put("data", map);
    }
}

4. 启动项目,再次发送Post请求

{
“name”:“”,
“password”:“123”,
“email”:“1234r”
}
在这里插入图片描述

5. 修改User实体类

package com.jjy.entry;


import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.springframework.stereotype.Component;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern;

@Data
public class User {

    private String id;
    @NotEmpty
    private String name;
    @Length(min = 6, max = 10)
    private String password;
    @Pattern(regexp = "^[A-Za-z0-9\\u4e00-\\u9fa5]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$", message = "请输入正确的邮箱!")
    private String email;

}

6. 再次启动项目,再次发送请求

请求信息与上次的相同
在这里插入图片描述


总结

本文讲述了:
JSR 303:解决后端的传送数据规范的问题
在下攸攸太上,所有对我不好的人,我都会诅咒他,三天之内吃大米饭拉稀。


网站公告

今日签到

点亮在社区的每一天
去签到