当前位置: 首页 > 知识库问答 >
问题:

MethodArgumentTypeMismMatchException-自定义错误消息?

臧兴学
2023-03-14
2021-07-01 04:59:14.995  WARN [tpe-rcf,2ff110026bf0649e,2ff110026bf0649e,false] 12800 
--- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver :   
Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException:   
Failed to convert value of type 'java.lang.String' to required type 'java.lang.Integer';    
nested exception is java.lang.NumberFormatException: For input string: "<script>alert(11355545)</script>"]
{

... 

"message": "Failed to convert value of type 'java.lang.String' to required type 'java.lang.Integer'; nested exception is java.lang.NumberFormatException: For input string: \"<script>alert(11355545)</script>\"",

"path": "/a/b/c"

}

安全测试人员声称,我应该清理返回的JSON(即转义这些<符号),因为这可能会给旧的浏览器带来一些问题(即在浏览器中执行此JS代码)。

但是生成错误消息的是SpringBoot框架,
我在这里没有太多的控制权。

当然,我可以将参数定义为String,并自己进行验证,但我怀疑这是否是正确的方法。我的参数定义为Integer,我希望它保持这种方式。

做这件事最简单的方法是什么?

共有1个答案

吕飞翼
2023-03-14

我不明白为什么@ControllerAdvise对你不起作用

这对于返回自定义消息非常有效

@RestControllerAdvice(basePackages = {"your.package"})
public class CustomRestExceptionHandler  {
    
    @ExceptionHandler({MethodArgumentTypeMismatchException .class})
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public ResponseEntity<FooBarErrorEntity> methodArgumentTypeMismatchException(MethodArgumentTypeMismatchException ex) {
        return new ResponseEntity<>(new FooBarErrorEntity(message, path),
                                HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

其中,FooBarErrorEntity可以是您的自定义错误实体,在这里您具有通常所期望的相同属性,您还可以解析消息并在ErrorEntity的构造函数中进行“消毒”,这将在出现更多要处理的异常时删除重复代码

 类似资料:
  • 我正在努力裁剪javax。验证。ConstraintValidator和javax。验证。根据我的需要限制ValidatorContext。我从格式错误的请求正文收到的响应消息始终采用以下形状: <代码> 此消息也以500而不是400错误请求的形式返回。我无法获得工作到解决方案来执行以下操作: 仅包括<代码> 我有以下代码: 向上面的代码发送格式错误的有效负载将导致如下消息: 我希望能够收到以下信

  • 问题内容: 我不时使用量角器1.7中引入的“预期条件”功能。 用例 : 页面对象在哪里。 如果在10秒钟内不可见,将引发错误: 这不是很可读,需要一些时间来理解和一些研究。 题: 是否可以自定义这种等待超时错误? 问题答案: 我相信有3个参数:条件,可选的超时和可选的描述消息。(我很确定这是文档:http : //angular.github.io/protractor/#/api? view=

  • 您好,我正在使用CodeIgniter构建RESTAPIhttps://github.com/chriskacerguis/codeigniter-restserver/blob/master/application/libraries/REST_Controller.php. 在_detect_api_key()函数中,他只检查给定的Api Key是否与表中存储的密钥匹配。我修改了一点这个方法,

  • javascript中是否有方法使运行时在错误消息中使用不同的对象表示。 典型的错误消息 如果我们可以为对象提供比更好的表示,那将很有帮助。在其他语言中,您可以通过覆盖使其打印更好的对象表示。 然而,在这种情况下,重写toString似乎没有效果。

  • 这样的消息在开发环境中很好,但是在生产环境中,我们不能在浏览器中向用户显示这一点。所以我想知道谷歌云存储中是否有定制这些消息和页面的规定。 提前感谢, 约杰什

  • 我使用的是关于这个链接的教程: http://www.mkyong.com/spring-security/display-custom-error-message-in-spring-security/ 在登录表单上显示一个自定义错误消息,我在开始时就得到了它。但是在为自定义失败身份验证器处理程序声明authentication-failure-handler-ref=“myautherrorh