JSR303微服务校验

一.创建idea

 

 

二.向pom.xml添加依赖

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

 三.添加application.yml

server:port: 100

 四.创建实体类

package com.jr.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;}

五. 创建控制类

package com.jr.controller;import com.jr.entry.User;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/demo")
public class DemoController {@PostMappingpublic String testJsr303(@Validated @RequestBody User user){return "ok";}
}

六.创建启动类

package com;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);}
}

 

1.使用@PostMapping注解时,接口要想成功接受到数据,需要使用x-www-form-urlencoded数据的格式发送数据。
2.使用@PostMapping+@RequestBody注解时,接口要想成功接受到数据需要使用raw数据的格式发送数据。  
3.但是使用html静态页面发送post请求时,数据是按照application/x-www-form-urlencoded;charset=UTF-8格式发送的,格式不符合,数据接收不到。 

启动启动器

七.使用postman工具

因为前端页面无法模拟,前端页面在这里创建不了,所以我们用postman工具演示。填好上面的地址:http://localhost:100/demo,点击body的raw输入代码后,点击send发送。

 

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== 八.规范返回值格式

但是发现响应的值,虽然是json格式的。但是这个格式并不是咱们想要的,前台后台都是约定好的数据格式,如果你的数据格式发生了变化,那么就需要特殊处理了,很麻烦。所以我们要对响应的结果做一个处理。每个项目组都不一样,只要会怎么用就行。

8.1添加ResultCode工具类

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;}
}

8.2添加Result类

package com.jr.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);}}

8.3添加ValidationExceptionAdvice工具类

package com.jr.util;
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.jr.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);}
}

重新启动项目

九.自己的idea项目结构

今天就到此位置,希望能帮到大家 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/55314.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Git】Git在Unity中使用时的问题记录

个人向笔记。 &#xff08;为什么没截图&#xff0c;因为公司电脑没法截图&#xff01;&#xff09; 1 前言 主要记录在使用Git协同开发时的各种问题&#xff0c;方便以后查阅。 2 记录 2.1 合并冲突 git pull下来后直接给合并了&#xff0c;麻了。若不想直接合并应该先把分…

职业技术学校开设无人机培训技术详解

职业技术学校开设无人机培训技术&#xff0c;是一个涉及多个方面的综合性教学过程。以下是对该培训技术的详细解析&#xff1a; 一、培训目标 无人机培训技术的目标在于培养学员掌握无人机的基本原理、组装调试、飞行操作、安全规范及维修保养等技能&#xff0c;使其成为具备…

基于SSM的定制衣服系统的设计与实现(定制衣服管理平台的设计与开发、智慧服装定制系统的设计与实现、定制衣服管理系统的设计与实现(源码+定制+参考文档)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

机器人的性能指标

1. 负荷能力 负荷能力负荷能力是指机器人在满足其他性能要求的情况下,能够承载的负荷重量。例如,一台机器人的最大负荷能力可能远大于它的额定负荷能力,但是达到最大负荷时,机器人的工作精度可能会降低,可能无法准确地沿着预定的轨迹运动,或者产生额外的偏差。机器人的负荷量与…

【redis-05】redis保证和mysql数据一致性

redis系列整体栏目 内容链接地址【一】redis基本数据类型和使用场景https://zhenghuisheng.blog.csdn.net/article/details/142406325【二】redis的持久化机制和原理https://zhenghuisheng.blog.csdn.net/article/details/142441756【三】redis缓存穿透、缓存击穿、缓存雪崩htt…

LeetCode hot100---双指针专题(C++语言)

双指针 (1)快慢双指针 适用于使用双指针进行元素移动&#xff0c;覆盖(2)首尾双指针 计算区域面积&#xff0c;三数之和1、移动0 &#xff08;1&#xff09;题目描述以及输入输出 (1)题目描述: 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#…

不只是前端,后端、产品和测试也需要了解的浏览器知识(一)

目录标题 一、我们为什么要了解浏览器&#xff1f;1. 对于前端开发者2. 对于后端开发者 二、浏览器发展概述1. 宏观发展2. 微观发展 三、浏览器核心部件1. 浏览器界面介绍2. 目前浏览器的使用的渲染引擎和解释器总结3. 浏览器的解释器 四、各家浏览器目前的市场占比五、整体总结…

Linux基础命令date详解

date 是一个用于显示和设置系统日期与时间的命令。它可以以多种格式输出当前的日期和时间。以下是 date 命令的常用参数及使用示例。 基本用法 date [选项] [格式] 常用参数详解 -u, --utc, --universal 使用协调世界时&#xff08;UTC&#xff09;显示日期和时间。 示例: …

索尼MDR-M1:超宽频的音频盛宴,打造沉浸式音乐体验

在音乐的世界里&#xff0c;每一次技术的突破都意味着全新的听觉体验。 索尼&#xff0c;作为音频技术的先锋&#xff0c;再次以其最新力作——MDR-M1封闭式监听耳机&#xff0c;引领了音乐界的新潮流。 这款耳机以其超宽频播放和卓越的隔音性能&#xff0c;为音乐爱好者和专…

tornado

Tornado通过使用非阻塞网络I/O&#xff0c;可以扩展到数以万计的开放链接&#xff0c;非常适合 长时间轮询&#xff0c;WebSockets和其他需要与每个用户建立长期连接的应用程序。 特点 注重性能优越&#xff0c;速度快解决高并发异步非阻塞websockets 长连接内嵌了HTTP服务器…

速盾:免备案服务器?

速盾是一家提供网络安全服务的公司&#xff0c;其主要产品包括CDN加速、WEB防护、WAF、DDoS防护等。在网站建设过程中&#xff0c;选择一个合适的服务器是非常重要的一步。传统的服务器需要备案&#xff0c;涉及到较多的流程和审批时间&#xff0c;给网站运营带来了一定的麻烦。…

04 B-树

目录 常见的搜索结构B-树概念B-树的插入分析B-树的插入实现B树和B*树B-树的应用 1. 常见的搜索结构 种类数据格式时间复杂度顺序查找无要求O(N)二分查找有序O( l o g 2 N log_2N log2​N)二分搜索树无要求O(N)二叉平衡树无要求O( l o g 2 N log_2N log2​N)哈希无要求O(1) 以…

安全服务面试总结

154.mysql 安全要如何做&#xff1f; Mysql 账户权限安全 第 61 页 共 152 页 Mysql 数据的网络安全配置 密码策略安全 Mysql 日志 Mysql 数据库服务所在主机安全配置部署 SQL 注入检测、防御模块 mysqld 安全相关启动选项 mysql 备份策略 155.sqlserver public 权…

Python 循环跳出模式

Python 循环跳出模式 在 Python 编程中&#xff0c;循环是实现重复任务的重要工具。通常&#xff0c;我们会使用 for 或 while 循环来遍历序列或执行特定操作。然而&#xff0c;有时我们需要在特定条件下提前终止循环&#xff0c;这就是循环跳出的机制。Python 提供了几种方式…

IO模型介绍

一、理解IO 网络通信的本质就是进程间通信&#xff0c;进程间通信本质就是IO TCP中的IO接口&#xff1a;read / write / send / recv&#xff0c;本质都是&#xff1a;等 拷贝 所以IO的本质就是&#xff1a;等 拷贝 那么如何高效的IO&#xff1f; 减少“等”在单位时间的…

jenkins配置eureka、nacos发布优雅上下线服务

eureka发布期间优雅上下线 1、编写eureka下线脚本 vim biz_out_of_service-eureka.pyimport sys import requests#服务名&#xff0c;脚本第一个参数 APP_NAMEsys.argv[1] # 需要置为OUT_OF_SERVICE的服务实例的ID&#xff0c;脚本第二个参数 INSTANCE_IDsys.argv[2]# Eureka…

维修保养记录接口-维修保养记录API-汽车接口

维修保养记录接口的使用主要涉及到API对接和在线查询两种方式。以下是详细的使用步骤和注意事项&#xff1a; 一、API对接 注册与申请&#xff1a; 首先&#xff0c;你需要在提供维修保养记录接口的平台&#xff08;如挖数据平台、第三方数据服务商等&#xff09;进行注册&…

CORDIC算法笔记整理

CORDIC算法有两种模式&#xff0c;分别为旋转模式和向量模式。而在数字硬件实现混频处理时&#xff0c;CORDIC算法是比较好的方法&#xff0c;使用的是CORDIC的旋转模式&#xff0c;只需通过移位操作和加法就可以实现频谱搬移的乘法操作。 1 CORDIC算法理解 1.1 单次旋转 对…

SpringCloud学习记录|day1

学习材料 2024最新SpringCloud微服务开发与实战&#xff0c;java黑马商城项目微服务实战开发&#xff08;涵盖MybatisPlus、Docker、MQ、ES、Redis高级等&#xff09; 学redis讲到微服务就停了&#xff0c;nginx也是。 所以嘛&#xff0c;我终于来到微服务了。 复习MyBatisP…

CMU 10423 Generative AI:lec14(Vision Language Model:CLIP、VQ-VAE)

文章目录 1 概述2 CLIP (Used in GPT-V)3 VQ-VAE (Used in Gemini)**VQ-VAE 详细笔记****VQ-VAE 的模块组成与数据流** **1. 输入数据****2. 编码器&#xff08;Encoder&#xff09;****2.1 编码器的作用****2.2 数据流与维度变化****2.3 编码器输出** **3. 量化器&#xff08;…