当前位置: 首页 > news >正文

若依学习笔记1-validated

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 保证 Spring AOP 相关的依赖包 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>

异常配置 统一拦截


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpServletRequest;@ControllerAdvice(basePackages = "com.gouying.demos.web")
public class GlobalExceptionHandler {private Logger logger = LoggerFactory.getLogger(getClass());/*** 处理 MissingServletRequestParameterException 异常** SpringMVC 参数不正确*/@ResponseBody@ExceptionHandler(value = MethodArgumentNotValidException.class)public Object missingServletRequestParameterExceptionHandler(HttpServletRequest req, MethodArgumentNotValidException ex) {logger.debug("[missingServletRequestParameterExceptionHandler]", ex);StringBuilder detailMessage = new StringBuilder();for (ObjectError objectError : ex.getAllErrors()) {// 使用 ; 分隔多个错误if (detailMessage.length() > 0) {detailMessage.append(";");}// 拼接内容到其中detailMessage.append(objectError.getDefaultMessage());}System.out.println(detailMessage);// 包装 CommonResult 结果return detailMessage;}}

这个类可以处理返回值

  • 不是Result类的返回Result
  • 想要更改数据这里也可以
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;// 只拦截我们的 Controller 所在包,避免其它类似 swagger 提供的 API 被切面拦截
@ControllerAdvice(basePackages = "com.gouying.demos.web")
public class GlobalResponseBodyHandler implements ResponseBodyAdvice {@Overridepublic boolean supports(MethodParameter returnType, Class converterType) {return true;}@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType,ServerHttpRequest request, ServerHttpResponse response) {// 如果已经是 CommonResult 类型,则直接返回System.out.println(String.valueOf(body));// 如果不是,则包装成 CommonResult 类型return "success";}}

controller

@Validated
@Controller
public class BasicController {// curl -H "Content-Type: application/json" -X POST -d '{"name":"123"}' "http://127.0.0.1:8888/hello"@PostMapping("/hello")@ResponseBodypublic String hello(@Valid @RequestBody  User user) {return user.getName();}}
http://www.dtcms.com/a/267379.html

相关文章:

  • Qt工具栏设计
  • Tensorboard无法显示图片(已解决)
  • 编程中的英语
  • CHAIN(GAN的一种)训练自己的数据集
  • Ubuntu基础(监控重启和查找程序)
  • 【Elasticsearch】深度分页及其替代方案
  • 基于 Python Django 和 Spark 的电力能耗数据分析系统设计与实现7000字论文实现
  • .NET9 实现排序算法(MergeSortTest 和 QuickSortTest)性能测试
  • Redis--黑马点评--基于stream消息队列的秒杀优化业务详解
  • 升级到MySQL 8.4,MySQL启动报错:io_setup() failed with EAGAIN
  • 每日算法刷题Day42 7.5:leetcode前缀和3道题,用时2h
  • Node.js worker_threads:并发 vs 并行
  • 洛谷刷题9
  • 如何在idea里快速地切换Windows CMD、git bash、powershell
  • 谷物干燥的滚筒式烘干机的设计cad【11张】三维图+设计说明书+绛重
  • LinkedList剖析
  • OneCode 图表组件核心优势解析
  • Kafka消息积压全面解决方案:从应急处理到系统优化
  • <script setup>中的setup作用以及和不带的区别对比
  • DeepSeek飞机大战小游戏HTML5(附源码)
  • 【动态规划】笔记—完全背包问题
  • opensuse tumbleweed上安装显卡驱动
  • 针对工业触摸屏维修的系统指南和资源获取途径
  • 【Linux】自旋锁和读写锁
  • Day52 神经网络调参指南
  • oracle的诊断文件的学习
  • SpringCloud系列(50)--SpringCloud Stream消息驱动之实现消费者
  • 零基础 “入坑” Java--- 七、数组(二)
  • grom 事务 RowsAffected 踩坑记录
  • 数据结构——栈的讲解(超详细)