Spring MVC返回HashMap遇HttpMessageNotWritableException问题求助
你遇到的这个错误,核心原因是Spring MVC找不到能将HashMap序列化为JSON格式的消息转换器,这通常是因为缺少JSON处理的依赖,或者没有正确启用Spring MVC的注解驱动配置。下面一步步帮你解决:
1. 添加JSON处理依赖(Jackson)
Spring MVC默认使用Jackson库来处理JSON的序列化和反序列化,所以首先要确保你的项目中包含Jackson的核心依赖。如果是Maven项目,在pom.xml中添加以下依赖:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> <!-- 可替换为最新稳定版本 --> </dependency>
如果是Gradle项目,对应的配置是:
implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2'
2. 启用Spring MVC注解驱动
你的ApplicationContextConfig配置类目前只配置了视图解析、数据源和事务相关内容,但没有启用Spring MVC的核心注解支持。需要在配置类上添加@EnableWebMvc注解——这个注解会自动注册包括MappingJackson2HttpMessageConverter在内的一系列消息转换器,而正是这个转换器负责把Java对象(包括HashMap)转换成JSON:
@Configuration @ComponentScan("com.fyt.fyt") @EnableTransactionManagement @EnableWebMvc // 新增该注解 public class ApplicationContextConfig { // 原有Bean配置保持不变... }
3. 小细节优化(可选)
看你的Controller代码,最后返回的是new ResponseEntity<>(message,HttpStatus.CREATED),但你之前明明构建了包含success和message的json对象,这里大概率是笔误。如果要返回你定义的完整JSON结构,应该改成:
return new ResponseEntity<>(json, HttpStatus.OK);
另外,HttpStatus.CREATED通常用于POST请求创建资源的场景,GET请求用HttpStatus.OK语义更合适。
完成前两步(添加依赖+启用@EnableWebMvc)后,再用Postman调用接口,就能正常返回JSON格式的响应了。
内容的提问来源于stack exchange,提问作者theanilpaudel

