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