JSR 303学习

系列文章目录

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学习


前言

本文我们要讲述:
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:解决后端的传送数据规范的问题
在下攸攸太上,所有对我不好的人,我都会诅咒他,三天之内吃大米饭拉稀。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值