为何这段Rest API代码无法执行POST请求?addTopic添加主题失败
排查Spring Boot添加Topic接口的400错误及无法添加主题问题
看起来你遇到了两个潜在问题:一个是接口调用返回400的反序列化错误,另一个可能导致即便接口正常也无法向列表添加元素。咱们一步步来解决:
1. 解决HttpMessageNotReadableException(400 Bad Request)
这个异常的核心原因是Spring无法将请求体的JSON数据转换成Topic对象,主要问题出在你的Topic类上:
你只给Topic类写了一个带三个参数的构造方法,但是Spring默认使用的Jackson序列化库,在反序列化时需要一个无参构造方法来实例化对象,之后再通过setter方法为属性赋值。如果没有无参构造,Jackson不知道怎么创建Topic实例,就会抛出这个错误。
修复方法:
给Topic类添加一个无参构造方法:
public class Topic { // ... 现有属性和方法 ... // 添加无参构造 public Topic() { super(); } // ... 现有带参构造和getter/setter ... }
另外还要确保你发送的请求体JSON格式正确,字段名和Topic类的属性名完全匹配(大小写敏感),比如:
{ "id": "spring", "name": "backend", "description": "Spring framework description" }
2. 确保列表可以正常添加元素
你用new ArrayList<>(Arrays.asList(...))初始化topics列表的方式是正确的(Arrays.asList()返回的是固定大小的列表,用new ArrayList包装后就变成了可动态扩容的普通ArrayList),但还是要确认你的topicService是否正确注入,并且调用的是同一个topics列表实例——不过这部分应该是没问题的,先解决上面的400错误,接口调用成功后再验证添加逻辑。
额外检查点
- 确认你的
@PostMapping("/topics")接口所在的类已经被Spring扫描到(比如添加了@RestController或@Controller注解) - 确认请求头的
Content-Type设置为application/json,否则Spring无法识别请求体格式
内容的提问来源于stack exchange,提问作者Eryk Vest
相关产品推荐
相关产品推荐

