2019独角兽企业重金招聘Python工程师标准>>>

在有参数校验的基础上,新建异常处理类:(@ControllerAdvice("com.store.score.rpc.web")控制访问提示信息范围)

package com.store.score.util;import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import javax.validation.UnexpectedTypeException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
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 org.springframework.web.bind.annotation.ResponseStatus;
import com.store.score.model.response.MapResModel;@ResponseBody
@ControllerAdvice("com.store.score.rpc.web")
public class ApiExceptionHandler {private static final Logger LOGGER = LoggerFactory.getLogger(ApiExceptionHandler.class);/*** @param exception UnexpectedTypeException* @param response* @return*/@ResponseStatus(HttpStatus.BAD_REQUEST)@ExceptionHandler(UnexpectedTypeException.class)public MapResModel unexpectedType(UnexpectedTypeException exception, HttpServletResponse response){MapResModel mapResModel = new MapResModel();LOGGER.error("校验方法太多,不确定合适的校验方法。", exception);mapResModel.failure("校验方法太多,不确定合适的校验方法。");return mapResModel;}@ResponseStatus(HttpStatus.BAD_REQUEST)@ExceptionHandler(HttpMessageNotReadableException.class)public MapResModel messageNotReadable(HttpMessageNotReadableException exception, HttpServletResponse response){MapResModel mapResModel = new MapResModel();LOGGER.error("请求参数不匹配。", exception);mapResModel.failure("请求参数不匹配:"+exception.getMessage());return mapResModel;}@ResponseStatus(HttpStatus.BAD_REQUEST)@ExceptionHandler(Exception.class)public MapResModel ex(MethodArgumentNotValidException exception, HttpServletResponse response){MapResModel mapResModel = new MapResModel();LOGGER.error("请求参数不合法。", exception);Map<String, String> map = getErrors(exception.getBindingResult());mapResModel.setData(map);mapResModel.failure("请求参数不合法。");return mapResModel;}private Map<String, String> getErrors(BindingResult result) {Map<String, String> map = new HashMap<>();List<FieldError> list = result.getFieldErrors();for (FieldError error : list) {map.put(error.getField(), error.getDefaultMessage());}return map;}
}

转载于:https://my.oschina.net/u/3768722/blog/1924956

2,Spring-mvc添加参数校验:避免参数格式不正确导致的400相关推荐

  1. Spring MVC竟然有5种参数绑定的方式?你知道几种?

    转载自  Spring MVC竟然有5种参数绑定的方式?你知道几种? SpringMVC参数绑定,简单来说就是将客户端请求的key/value数据绑定到controller方法的形参上,然后就可以在c ...

  2. 校验身份证号码格式是否正确

    <?php /*** 校验身份证号码格式是否正确* @param string $idcard* @return bool*/ function checkIdcard($idcard) {$i ...

  3. Spring Mvc Controller返回值、参数绑定、参数校验 (高级二)

    1,Controller 返回值 返回moduleAndView 返回 String 返回void 2,Controller 参数绑定 客户端请求携带的key/value 键值对 绑定到 Contro ...

  4. Spring MVC同一方法返回JSON/XML格式

    最近一道面试题,要求同一API接口支持不同格式返回值.一开始是设想通过过滤器(Filter)设置返回值,但是并不可行,因为方法返回值一般都是类型需要做转换,而过滤器则是前置的.另一方面可以通过拦截器的 ...

  5. spring mvc使用@InitBinder 标签将日期格式字符串转换成Timestamp类型

    在SpringMVC中,可以采用实体类来自动绑定表单传递过来的参数,但需要注意的是,若实体类属性是Date或Timestamp类型的话,SpringMVC将无法自动绑定,会产生400错误,所以需要我们 ...

  6. Spring Boot参数校验以及分组校验的使用

    简介:做web开发基本上每个接口都要对参数进行校验,如果参数比较少,还比较容易处理,一但参数比较多了的话代码中就会出现大量的if-else语句.虽然这种方式简单直接,但会大大降低开发效率和代码可读性. ...

  7. Spring Boot参数校验

    1. 概述 作为接口服务提供方,非常有必要在项目中加入参数校验,比如字段非空,字段长度限制,邮箱格式验证等等,数据校验常用到概念: JSR303/JSR-349: JSR303是一项标准,只提供规范不 ...

  8. spring boot参数校验 告别校验胶水代码

    ​ springboot进行参数校验 文章目录 前言 普通的逻辑代码校验 PathVariable 路径变量校验 JSR规范是什么? springboot-JSR303参数校验 引入参数校验依赖 官网 ...

  9. Spring MVC数据转换、格式化、校验、文件上传和下载

    本篇文章主要分享下自己在学习Spring MVC数据转换.格式化和数据校验.Spring MVC文件上传和下载以及Spring MVC拦截器遇到的一些问题和读书笔记,希望对你有所帮助. @Compon ...

最新文章

  1. Linux那些事儿 之 戏说USB(1)它从哪里来
  2. python读取大文件目录_Python读取系统文件夹内所有文件并统计数量的方法
  3. Hadoop伪集群环境搭建
  4. servlet.jar--jar not loaded错误
  5. python中模块和包是什么_Python中模块和包的概念
  6. 01-浏览器同源政策 以及 什么是跨域?怎么解决跨域问题?
  7. 介绍一个Spring Cloud分布式微服务架构图
  8. 阿里云 OSS 如何设置防盗链, 上个月图床流量耗费50G+,请求次数10W+,什么鬼?
  9. 05_android入门_GET方式实现登陆(在控件上显示服务端返回的内容)
  10. CentOS 关闭暂不需要的系统服务
  11. Luogu2774 方格取数问题
  12. 黑客攻防技术宝典:浏览器实战篇 -- 上篇(笔记)
  13. 锁定计算机密码如何取消,如何取消笔记本电脑硬盘密码锁?
  14. 国瀚实业|个人如何投资理财
  15. 全网最全软件测试面试题,拿不到offer算我输!
  16. Macbook air小白装双系统
  17. DFS(深度优先搜索算法)入门保姆级超详解
  18. chromedriver与chrome各版本对应及下载地址
  19. 潜渊症LINUX环境部署全流程
  20. linux多进程和多线程分析之一 .

热门文章

  1. 中国美丽乡村建设投融资及十四五发展规划分析报告2022-2028年版
  2. 全球及中国洁净室层流设备行业需求现状与投资战略规划研究报告2021年版
  3. 中国联轴器行业发展态势分析及十四五规划建议报告2021-2027年
  4. html5+开发window桌面图标,js模仿windows桌面图标排列算法具体实现(附图)
  5. 学习Struts--Chap02:Struts2框架各个功能模块和程序执行流程的介绍
  6. 读书笔记-JavaScript高级程序设计(1)
  7. bzoj 3357 [Usaco2004]等差数列 dp
  8. 【MySQL】玩转定时器
  9. Google员工自述:在哈佛教书和在Google工作的差别
  10. 使Win10用户获得特殊权限以便删除相应文件(夹)