首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SpringMVC参数校验(针对`@RequestBody`返回`400`)

spring返回400时候通常没有任何错误提示,当然通常是参数不匹配。这在参数少情况下还可以一眼看穿,但当参数很大是,排除参数很麻烦,更何况,既然错误了,为什么指出来原因呢。...内嵌异常处理 如果只是这个controller异常做单独处理,那么就适合绑定这个controller本身异常。 具体做法是使用注解@ExceptionHandler....另外,@ResponseStatus(HttpStatus.BAD_REQUEST)这个注解是为了标识这个方法返回HttpStatus code。设置为400,当然可以自定义成其他。 2....Hibernate-validate 使用参数校验如果不catch异常就会返回400. 所以这个也要规范一下。...被注释元素必须是一个数字,其必须大于等于指定最小 * @DecimalMax(value) 被注释元素必须是一个数字,其必须小于等于指定最大 * @Size

2.6K40

Spring MVC 异常解析器,原理就是这么简单

方法注释掉,此时LocationController类里面已经没有被@ExceptionHandler注解标记方法了 访问上面的链接,返回结果为 MyExceptionHandler -> 发生RuntimeException...,我们可以得出如下结论 @RestControllerAdvice或者@ControllerAdvice类内解析器优先级低于@RequestMapping类解析器优先级 如果一个异常能被多个解析器所处理...和@ControllerAdvice什么区别呢?...名字就可以猜出@RestControllerAdvice只是在@ControllerAdvice基础加了@ResponseBody注解,看一波源码确实如此。...如果你不明白为什么加了@ResponseBody注解最终返回内容为JSON,建议看一下返回处理器相关内容 源码分析 异常解析器接口定义如下 public interface HandlerExceptionResolver

1.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

sql分页遍历出现重复数据原因与解决方案

,里边高赞回答可知,sql-92标准中指明如果没有排序,那么返回数据顺序将由数据实现决定。 2.1 Oracle order by 是稳定排序么?...这意味着: 如果没有执行更新,则即使没有指定ORDER BY子句,或者ORDER BY句中指定顺序有联系,同一语句会在重复查询时以相同顺序返回结果。...然后,更新插入带有4记录(在指定页之前),删除带有6记录(在指定页),并插入带有9记录(在指定页之后)。更新后,同一查询结果将为{4、5、7、8}。...官方文档描述比较符合预期,因为觉得要是去实现,就会使用稳定排序算法去实现,而不是非稳定算法。...觉得看法太浅了,相当于提出了解决方案,但是不知道什么能够解决没有了解,另外就是文章感觉个人主观猜想太强了,理论没有依据来源感觉,可信度就感觉比较低。

1.7K20

写了一套优雅接口之后,领导让给大家讲讲这背后技术原理

另外,有个小伙伴看完上篇文章,觉得这个注解跟 Spring Interceptor 功能很类似,再加上之前还学习了 Servlet 体系 Filter 功能,不知道这几个有什么区别,感觉很混乱。...如果您对专题内容感兴趣,可以关注博客:studyidea.cn 从源码解析背后原理 上篇文章中我们看到 ResponseBodyAdvice子类使用 @ControllerAdvice...注解,大家有没有好奇,如果将@ControllerAdvice换成 @Controller 注解,还能达到上篇文章效果吗?...这就解释了为什么实现 ResponseBodyAdvice接口子类一定要与@ControllerAdvice一起使用原因了。 接下来我们来看下 ResponseBodyAdvice 执行流程。...这里教给大家一个代码调试小技巧,当我们不知道一个类在源码中如何被调用时候,我们可以使用 IDEA 代码调试功能,然后查看代码调用栈。 ?

46810

Spring Boot REST API错误处理指南

此注解将作为处理此控制器中抛出异常入口点。总而言之,最常见方法是在@ControllerAdvice方法使用@ExceptionHandler,以便将异常处理应用于全局或控制器子集。...受影响控制器子集可以在@ControllerAdvice使用以下选择器进行定义:annotations(),basePackageClasses()和basePackages()。...如果没有提供选择器,则ControllerAdvice将应用于全局所有的控制器。...Spring程序处理数据调用一个常见场景是使用类通过id去查找记录。但是,如果研究一下CrudRepository.findOne()方法,我们会发现,如果找不到对象,它将返回null。...这意味着如果我们服务只是调用这个方法并直接返回给控制器,那么即使找不到资源,我们会得到HTTP返回码200(OK)。

3.2K20

【译】如何在 Spring 中将 @RequestParam 绑定到对象

,我们可以使用组合。...参数绑定适用于嵌套对象。 下面你可以找到一个例子,将之前引入排序条件移动到了产品查询条件 POJO 中。 要校验所有嵌套属性,你应该在嵌套对象字段添加 @Valid 注解。...如果所有嵌套属性都是可选,那么这可能是预期解决方案。如果不是,则需在嵌套对象字段放置 @NotNull 注解。...在我们例子中,它们应该如下所示: sort.order=ASC&sort.attribute=name 不可变 DTO 如今,你可以观察到一种趋势,即从传统带有 setter POJO 转向不可变对象...你可以 在 GitHub 仓库中找到本文中描述完整代码[6]。希望呈现案例是自解释,但如果有任何疑问,或者你想发表你看法,强烈建议你在文章下方留下你评论。

11310

MySQL 系列:注意 ORDER 和 LIMIT 联合使用陷阱

BY create_date LIMIT 8,2;上面的结果是不是很奇怪,按照大家正常思考,MySQL 对我们查询数据进行整体排序,我们按页取出,理论应该在不同页中有相同数据,下面我们一起来看看隐藏在背后原因....如果多个行在ORDER BY列中具有相同,则服务器可以自由地以任何顺序返回这些行,并且可以根据总体执行计划以不同方式返回。...如果使用索引排序,那么速度会非常快;如果使用文件排序,所有满足条件都会被选中(不包括 Limit 条件),这些行大多数,或全部都会被排序直到满足 Limit 行数。...在博客,你将找到关于Java核心概念、JVM 底层技术、常用框架如Spring和Mybatis 、MySQL等数据管理、RabbitMQ、Rocketmq等消息中间件、性能优化等内容深入文章。...将分享一些编程技巧和解决问题方法,以帮助你更好地掌握Java编程。 鼓励互动和建立社区,因此请留下你问题、建议或主题请求,让知道你感兴趣内容。

24620

Spring MVC ControllerAdvice深入解析

而Spring MVC是如何做到资料却比较少,下面会先给出使用例子和踩过一个坑。然后进行相应源码分析,之后再介始ControllerAdvice另外两种使用方式。...ControllerAdvice简单使用 ControllerAdvice配合ExceptionHandler可以统一处理系统异常,我们先定义一个ExceptionAdvice类用于处理系统两种类型异常...  下面来看看Spring MVC是如何处理异常,为什么手动配置了RequestMappingHandlerMapping和RequestMappingHandlerAdapter ControllerAdvice...也就是为什么ControllerAdvice不会对异常进行处理了,我们同时可以想到一定是帮助我们注入了一个HandlerExceptionResolver...ControllerAdvice配合使用来处理各种异常呢?

1.4K11

SpringBoot遗忘知识点整理

form-data也是无效生效, 如果@DateTimeFormat放到@RequestBody下是无效。...在@RequestBody中则可以使用@JsonFormat把传给后台时间字符串转成Date,也就是说@JsonFormat其实既可以把传给后台时间字符串转成Date可以把后台传出Date转成时间字符串...用法,@Transient 就是在给某个javabean需要添加个属性,但是这个属性你又不希望给存到数据中去,仅仅是做个临时变量,用一下。不修改已经存在数据数据数据结构。...@Transient这个注解一般是用来放在某些数据中不存在字段但是你又希望用到数据,比如: 这个spu是不存在在数据表中,但是又需要使用.就是在这种情况下才会用到@Transient...// 表示使用配置文件中前缀为user1属性初始化该bean定义产生bean实例同名属性 // 在使用时这个定义产生bean时,其属性name会是Tom @ConfigurationProperties

39910

你还以为使用 StringBuffer 就万事大吉了?

就连官方注释写着,StringBuffer是一个线程安全可变字符序列。StringBuffer可以安全在多线程场景下使用。 事实真的是这样吗?还真不是。...为什么使用StringBuffer仍不是万事大吉 首先咱们得定义什么是线程安全,线程安全就是在多线程运行环境下,最终输出结果是正确。...append为例 从参加工作到现在,遇到所有append,拼接sql是多较多,或者是把数据几个字段拼接成一段话。...如果是多线程环境运行,你根本无法预测最终结果是什么,不光是你预测不了,JVM自己都不知道最终出来是个什么货,只能交给天意了 如果有两个线程同时执行append方法 线程1 stringBuffer.append...说了这么多,你发现了没,你找不到一个用StringBuffer理由,工作这么久是没见过,不光没见过,Effective java作者josh bloch说没见过,他在书中说: StringBuffer

42640

卧槽,sql注入竟然把我们系统搞挂了

不知道你在查询数据时有没有用过like语句,比如:查询名字中带有“苏”字用户,就可能会用类似这样语句查询: select * from user where name like '%苏%'...为什么会出现这个问题呢? %在mysql中是关键字,如果使用like '%%%',该like条件会失效。 如何解决呢? 需要对%进行转义:/%。...在java中如果使用mybatis作为持久化框架,在mapper.xml文件中,如果入参使用#传,会使用预编译机制。...删跑路 不乏有些攻击者不按常理出牌,sql注入后直接把系统表或者数据都删了。...这时,我们需要对数据线程做监控,如果某条sql执行时间太长,要邮件预警。此外,合理设置数据连接超时时间,能稍微缓解一下这类问题。

42610

MySQL - 当LIMIT 进行分页时,为什么出现了重复数据

撸了今年阿里、头条和美团面试,有一个重要发现.......>>> ?...说在前面 数据分页是后台经常要使用技术手段,有时候进行数据查询会根据业务需要对某一字段排序,那么当待排序字段相同时,我们得到查询结果会是什么呢?...问题原因 期初还很好奇,总数没问题,总查询没问题,为什么数据会重复了,然后会把部分数据给覆盖了。...如果指定ORDER BY语句,SQL Server将对行进行排序,并按请求顺序返回。...但是,如果该顺序不是确定性,即可能有重复,则在每个具有相同组中,由于与上述相同原因,该顺序是“随机”。

4.3K20

.NET深入解析LINQ框架(一:LINQ优雅前奏)

按照常理说在泛型方法形参里面定义一个泛型委托,他们形参类型都是一样占位符,但是如果使用带有形参方法作为委托参数的话是无法进行类型推断,然后使用无参数方法作为委托参数是完全没有问题。...然后必须使用Lambda表达式才能做正确类型推断,如果直接将带有参数某个方法作为委托参数进行传递是无法进行真确类型推断,这里表示很不理解。贴出代码与大家讨论一下这个问题。...奇怪如果使用带有参数和返回类型Lambda表达式作为GetModelList(Func GetFunc)方法参数时就能正确类型推断...如果没有实例对象引用想扩展方法毫无意识。所以这里我们使用Count方法来汇总一共有多少Order对象。...而如果我们使用字符串方式来表达逻辑结构,那么我们只能在运行时才能知道它正确性,这样正确性是很脆弱不知道什么情况下会出现问题。

1.8K31

SpringBoot-MyBatis-luckwheel-master开源代码审计

所以需要手动创建一个数据 1、导入数据 看一眼spring配置名叫youyoudb 创建跟这个一样名称,然后导入表即可 这里codepay_order自己创建,后边会说到为什么...现在不报错了,这里为什么会不报错主要是因为在数据中有id为1用户,可以看一眼数据 这里自己加,所以就不会报错了 这里已经任意用户登录了吧 然后在common.js中可以看到,...其实之前可能有登录功能 但是下载下来源码并没有,开始以为是作者删了,又去看了一遍commit,发现根本就没有上传登录前端源码 看一眼后台样子 目前所有的搭建都已经完成了 代码审计...可以注入 严格来说这里算是一处SQL注入,因为在业务只需要修canDog这一个接口就可以了 3、后台存储XSS 没什么好说 直接取这里返回数据展示在前端了,并且在list接口没过滤...,随后如果exchange如果不为空的话,就从map中get出来pname,并赋值给pname,Java是强类型语言这里定义接收pname使用是String Name,我们POST参数是int

66110

绕过安全狗进行sql注入(MySQL)

还是被拦截了,那我们再想办法把1=1给替换掉,只要能表示真假就达到我们目的了,首先想到就是字符(字符表示真),但是会被拦截。...判断字段数 接下来就是常用order by语句绕过了,看freebuf有个哥们写了一篇文章,直接使用大小写就绕过了,而且他也是安全狗v4.0(他今年(2018)五月份测试),测试时候大小写直接被毫不留情拦截了...by*/1--+ 不拦截 注:据说有些版本order by是直接不过滤,这里也是通过很简单内联注释就过了,看了安全狗并不在意order by,大多数waf都是把注意力放在了能爆出数据union...不知道什么速度及其慢,跑了一晚上啥没跑出来,只有再去网上查查资料,看看以往方法是否可行(这种东西一般是见光死,放出来基本就没用了) 尽管如此还是被我发现了一些: http://127.0.0.1...当然,我们在注入时候需要用到union select from,这里如果直接加上from,肯定是会被过滤掉(毕竟安全狗不傻),所以,我们只要在from与表名之间按照union 与select之间同样规则变形就可以绕过了

1.9K40

天,sql注入竟然把我们系统搞挂了

不知道你在查询数据时有没有用过like语句,比如:查询名字中带有“苏”字用户,就可能会用类似这样语句查询: select * from user where name like '%苏%'; 正常情况下是没有问题...为什么会出现这个问题呢? %在mysql中是关键字,如果使用like '%%%',该like条件会失效。 如何解决呢? 需要对%进行转义:\%。...在java中如果使用mybatis作为持久化框架,在mapper.xml文件中,如果入参使用#传,会使用预编译机制。...删跑路 不乏有些攻击者不按常理出牌,sql注入后直接把系统表或者数据都删了。...这时,我们需要对数据线程做监控,如果某条sql执行时间太长,要邮件预警。此外,合理设置数据连接超时时间,能稍微缓解一下这类问题。

2.1K21

Spring解决泛型擦除思路不错,现在它是了。

不知道这是在干什么,反正拿到了代码样例,那我们就白嫖一下嘛: @Data class BaseEvent implements ResolvableTypeProvider { private...这是为什么呢? 为什么不知道什么,但是知道源码之下无秘密。 所以,先打上断点再说。...也许在看过程中,你会冒出这样一个问题:为什么要搞这么麻烦?把这些事件监听业务逻辑直接写在对应数据操作语句之后不行么? 要回答这个问题,我们可以先总结一下事件通知机制使用场景。...数据变化之后同步清除缓存,这是一种简单可靠缓存更新方式。只有在清除失败,或者数据主从同步间隙被脏读才有可能出现缓存脏数据,概率比较小,一般业务也是可以接受。...假设这个方案由于某些原因不能使用或者不敢使用是一回事。 但是知不知道这个方案,是另一回事。 好啦,本文技术部分就到这里了。

13810

这些开发好习惯,让你更优秀!

今天给大家分享一些优秀后端开发程序员应该具备开发习惯,希望对大家有帮助~ 1.注释尽可能全面,写有意义注释 接口方法、类、复杂业务逻辑,都应该添加有意义注释 对于接口方法注释,应该包含详细入参和结果说明...如果是业务逻辑很复杂代码,真的非常有必要写清楚注释。 清楚注释,更有利于后面的维护。...(但是呢,如果是操作数据不要一次性查太多数据哈,可以分批500一次酱紫)。...优秀后端,要做配置化处理,你可以把这些可变参数,放到数据一个配置表里面,可以放到项目的配置文件或者apollo。...当然,我们linux服务器一样,平时操作文件,或者数据连接,IO资源流如果没关闭,那么这个IO资源就会被它占着,这样别人就没有办法用了,这就造成资源浪费。

28440

跟我学 Java 8 新特性之 Stream 流(五)映射

另外,如果你希望对流中元素应用一些转换,然后把转换元素映射到一个新流里面,这时候可以用映射。...第一种方式,大家需要好好理解,理解了,相信你们项目中,很多很多地方可以用得上了,再也不需要动不动就查数据了,怎样效率高怎样来,只是一种建议。第二种只是快速计算团队经济而已,没什么值得讲。...其实在创建数据查询时候,这种过滤操作十分常见,如果你经常在你项目中使用流API,这几个条件算什么?...然后源码注释上面还提供了一个例子,通过注释加例子,相信大家都能非常清楚地理解flatMap()了。...使用map()打印元素方式在 //note2 ,原因注释中交待了,但是使用了flatMap()方法后,直接就可以打印了 //note3 ,到这里,应该就能理解如果orders是一批采购订单对应

54320

可能被你误解 DRY 原则

1.2 如何理解 DRY 原则 DRY 针对是知识和意图复制,强调多个地方表达东西其实是相同,只是表达方式不同。 Q:知识和意图 这两个词比较抽象,如果具体到编码,指代什么呢?...实际,DRY 原则对工作、生活中问题也有着指导作用,比如我写本文由于要作用于博客、ppt 等场景,创建了多个副本,设想一下,如果要修改某个章节,是不是每处都要改?到时候或许会抓狂。...Q:所有代码重复都是知识重复么? 2.2 文档重复 这里文档是广义,还包括注释等。 比如方法注释把方法中逻辑分支都描述了一遍,函数意图就被描述了两次(注释、代码各一次)。...但是,注释掩盖不了糟糕代码。 如果是为了掩饰方法中糟糕或者晦涩难懂代码,这时候应该重构代码。 推荐: 方法名准确描述方法要做什么,方法内每行代码都写注释一样清晰易懂,注释则可以移除。...使用 lib 包,可以封装实体类,甚至更进一步,把远程调用代码封装进来。

1.1K20
领券