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

TypeScript对象POST至Spring报错,是否需将数字声明为字符串?

问题分析与解决方案

别着急把数字改成字符串——这根本不是你遇到问题的根源!

先看你收到的错误提示:

JSON parse error: Cannot deserialize instance of java.lang.String out 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:06:31