You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法解决JSON解析错误:因输入结束无内容可映射

解决HttpMessageNotReadableException:JSON请求体无法解析到LoaderInfo的问题

我来帮你排查这个头疼的问题!你遇到的HttpMessageNotReadableException本质上就是JSON请求体和Java实体类LoaderInfo的映射出了问题,结合你贴的代码,我整理了几个关键排查点和解决方案:

1. 先确认JSON格式和字段匹配度

首先,在浏览器控制台打印你发送的JSON内容,看看是不是符合预期:

console.log(JSON.stringify(pageInfo));

要确保:

  • 所有键名和LoaderInfo的字段名完全大小写一致(比如nbrPages不能写成nbrpages)
  • filterValue数组的格式正确,没有语法错误(你写的["blah", "blah"]是对的,但要确保实际场景里没有空数组或者非字符串元素)

2. 把ArrayList改成List,提升兼容性

你的LoaderInfo里filterValue用的是ArrayList<String>,虽然Jackson理论上能处理,但换成更通用的List<String>会更稳妥——Jackson对接口类型的序列化/反序列化支持更友好:

private List<String> filterValue;
// 对应的getter/setter也要改成List类型
public List<String> getFilterValue() {
    return filterValue;
}
public void setFilterValue(List<String> filterValue) {
    this.filterValue = filterValue;
}

3. 检查Jackson的依赖和配置

如果是传统Spring MVC项目(不是Spring Boot),要确保已经引入Jackson的核心依赖:

<!-- Maven示例 -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>你的版本号</version>
</dependency>

并且在Spring配置文件里注册MappingJackson2HttpMessageConverter,确保Spring能正确处理JSON请求:

<mvc:annotation-driven>
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
    </mvc:message-converters>
</mvc:annotation-driven>

Spring Boot项目默认已经配置好了,这一步可以跳过。

4. 用调试技巧定位具体错误

如果上面的步骤都没解决,建议临时修改控制器方法,先接收原始JSON字符串,手动解析排查问题:

@RequestMapping(value = "/changepage")
public String dashboardChangePage(@RequestBody String requestBody, ModelMap model, HttpServletRequest request) {
    // 打印接收到的JSON,确认内容正确
    System.out.println("Received JSON: " + requestBody);
    
    ObjectMapper mapper = new ObjectMapper();
    try {
        // 手动解析,看具体哪里出错
        LoaderInfo loaderInfo = mapper.readValue(requestBody, LoaderInfo.class);
        model.addAttribute("loaderInfo", loaderInfo);
        return dashboardList(model, request);
    } catch (JsonProcessingException e) {
        // 这里会输出具体的解析错误,比如哪个字段类型不匹配
        e.printStackTrace();
        return "error"; // 临时返回错误页
    }
}

运行后看控制台的异常栈,就能精准定位是哪个字段出了问题(比如某个数字字段传了字符串,或者数组类型不匹配)。

5. 确保无参构造和getter/setter完全正确

你已经写了无参构造,这是Jackson实例化对象的必要条件,但要再检查一遍所有字段的getter/setter:

  • 命名必须符合JavaBean规范(比如getNbrPages()、setNbrPages(Integer nbrPages))
  • 不要漏掉任何字段的getter/setter(比如filterType、sortOrder这些字符串字段)

内容的提问来源于stack exchange,提问作者thedigginman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:24:30