TypeScript对象POST至Spring报错,是否需将数字声明为字符串?
问题分析与解决方案
别着急把数字改成字符串——这根本不是你遇到问题的根源!
先看你收到的错误提示:
JSON parse error: Cannot deserialize instance of
java.lang.Stringout of START_ARRAY token
这个错误说明Spring在反序列化JSON时,发现某个本该是字符串类型的字段,收到的却是一个数组(START_ARRAY),但你提供的请求体{"activityDays":1,"name":"test"}里并没有数组,所以问题大概率出在Spring端的Environment实体类定义上,和前端的数字类型无关。
具体检查步骤
1. 检查Spring实体类的字段类型
确保你的Spring Environment类的字段类型和前端JSON完全匹配:
name字段必须是String类型,不能是List<String>或其他数组/集合类型(这是最可能触发该错误的原因);activityDays可以是int或Integer类型,JSON里的数字1能被正常反序列化,不需要改成字符串。
正确的Spring实体类示例:
public class Environment { private String name; private Integer activityDays; // 用Integer比int更灵活,支持null值 // 必须提供无参构造函数(Jackson反序列化需要) public Environment() {} // 必须提供Getter和Setter方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getActivityDays() { return activityDays; } public void setActivityDays(Integer activityDays) { this.activityDays = activityDays; } }
2. 检查字段名匹配度
如果你的Spring实体类用了下划线命名(比如activity_days),而前端传的是驼峰式activityDays,需要给字段加上@JsonProperty注解来映射:
@JsonProperty("activityDays") private Integer activityDays;
3. 确认请求头设置正确
前端发送POST请求时,必须确保Content-Type设置为application/json,否则Spring可能无法正确解析JSON请求体。检查你的options是否包含:
const options = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };
总结
你不需要把数字改成字符串,重点排查Spring端的实体类定义和请求头配置——只要实体类字段类型、名称和前端JSON匹配,并且请求头正确,这个反序列化错误就能解决。
内容的提问来源于stack exchange,提问作者user9833488
相关产品推荐
相关产品推荐

