系列文章目录
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介绍
- 1. JSR介绍
- 2. JSR 303介绍
- 二、PostMan官网下载
- 三、代码实现JSR 303
- 1. 创建Maven项目
- 2. 添加依赖
- 3. 创建application.yml配置文件
- 4. 创建User实体类
- 5. 创建DemoController控制器
- 6. 创建启动类
- 7. 启动项目
- 四、规范返回值格式
- 1. 创建ResultCode工具类
- 2. 创建Result工具类
- 3. 创建ValidationExceptionAdvice工具类
- 4. 启动项目,再次发送Post请求
- 5. 修改User实体类
- 6. 再次启动项目,再次发送请求
- 总结
前言
本文我们要讲述:
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 {@PostMappingpublic 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;@NotEmptyprivate 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:解决后端的传送数据规范的问题
在下攸攸太上,所有对我不好的人,我都会诅咒他,三天之内吃大米饭拉稀。