报错:HttpMessageNotReadableException: JSON parse error: Unexpected end-of-input

25,526次阅读
没有评论

共计 2447 个字符,预计需要花费 7 分钟才能阅读完成。

问题:

测试接口发送请求时后端报错:org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected end-of-input: expected close marker for Object (start marker at [Source: (PushbackInputStream); line: 1, column: 1]); nested exception is com.fasterxml.jackson…

出现这个错误的时候 postman 传的参数格式是这样子的:

报错:HttpMessageNotReadableException: JSON parse error: Unexpected end-of-input

后端代码接收参数是:

报错:HttpMessageNotReadableException: JSON parse error: Unexpected end-of-input

分析:

因为其实这个接口传送的方式是 Form 表单方式的,而且使用到了 @ApiImplicitParam,若有多个参数的话使用 @ApiImplicition 进行包裹,接收 x -www-form-urlencoded 类型的关键点就在于 @ApiImplicitParam。免去了使用 @RequestBody 在写一个接收类的繁琐步骤,加上 @ApiImplicitParam 之后直接接收即可。Form 表单方式在 Body 选项卡中选择 x -www-form-urlencoded 格式,然后在键值对中填写参数,例如:
name=John
age=30

有关 x -www-form-urlencoded 格式和 json 格式的区别,请参考博文

报错:HttpMessageNotReadableException: JSON parse error: Unexpected end-of-input

解决方法:

postman 发送请求 body 变成 x -www-form-urlencoded 格式,详情查看链接: 详情

报错:HttpMessageNotReadableException: JSON parse error: Unexpected end-of-input

后端接收方式修改为 ModelAttribute报错:HttpMessageNotReadableException: JSON parse error: Unexpected end-of-input

另:

如果报错 XssHttpServletRequestWrapper 接口不符合 XSS 规则时,也就是你发送的参数是 html 标签的时候会被认为是 XSS 攻击,在跨站脚本(XSS)攻击中,攻击者可以在受害者的浏览器中执行恶意脚本。这种攻击通常是通过在网页中插入恶意代码 (JavaScript) 来完成的。攻击者在使用攻击后一般能够:

  1. 修改网页内容
  2. 将用户重定向到其他网站
  3. 访问用户的 Cookie 并利用此信息来冒充用户
  4. 访问有关用户系统的关键信息,例如地理位置,网络摄像头,文件系统
  5. 将木马功能注入应用程序

如果被攻击的用户在应用程序中具有更高的权限。攻击者可以完全控制应用程序,并破坏所有用户及其数据。
常见的 XSS 攻击主要有三种:存储型 XSS 攻击 反射型 XSS 攻击 DOM-based 型 XSS 攻击。

  1. 存储型主要是将 XSS 代码保存在服务端(数据库、文件系统等),当用户以后再次请求该资源时重新解析该 XSS 代码,从而出现攻击。
  2. 反射型主要发生在一个应用程序使用动态页面向用户显示错误消息时,如果消息中注入了恶意代码就会造成 XSS 反射型攻击。
  3. DOM-based 主要是通过脚本直接修改客户端的 DOM 结构,一般这种都是属于前端 JavaScript 的漏洞。

所以避免 XSS 攻击最有效的办法就是对用户输入的数据进行转义,然后存储到数据库里面。等到视图层渲染 HTML 页面的时候。转义后的文字是不会被当做 JavaScript 执行的,这就可以抵御 XSS 攻击。

即在 web 配置文件中配置 XssFilter

${ms.xss.filterUrl}是在 appclication.yml 配置文件中设置的

报错:HttpMessageNotReadableException: JSON parse error: Unexpected end-of-input
webconfig 文件中

	
    @Bean
    public FilterRegistrationBean xssFilterRegistration(@Value("${ms.xss.xssEnable:false}") boolean xssEnable,
                                                        @Value("${ms.xss.filterUrl}") String filterUrl,
                                                        @Value("${ms.xss.excludeUrl}") String excludeUrl) {
        XSSEscapeFilter xssFilter = new XSSEscapeFilter();
        MapString, String> initParameters = new HashMap();
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setName("XSSFilter");
        registration.addUrlPatterns(new String[]{"/*"});
        registration.setOrder(-2147483648);
        xssFilter.includes.add("/**");
        xssFilter.excludes.add(MSProperties.manager.path + "/**");
        if (filterUrl != null && StrUtil.isNotBlank(filterUrl.toString())) {
            xssFilter.includes.addAll(Arrays.asList(filterUrl.toString().split(",")));
        }
        if (excludeUrl != null && StrUtil.isNotBlank(excludeUrl.toString())) {
            xssFilter.excludes.addAll(Arrays.asList(excludeUrl.toString().split(",")));
        }
        initParameters.put("isIncludeRichText", "false");
        registration.setInitParameters(initParameters);
        registration.setFilter(xssFilter);
        registration.setEnabled(xssEnable);
        return registration;
    }

原文地址: 报错:HttpMessageNotReadableException: JSON parse error: Unexpected end-of-input

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-09-30发表,共计2447字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)