Spring Boot接收前端POST JSON参数时time、view字段始终为0问题排查
问题根因
- 核心问题出在
Code实体类的注解配置:你在time和view两个字段上加了@JsonIgnore,这个注解会让JSON处理框架Jackson同时跳过这两个字段的**反序列化(接收前端参数赋值)和序列化(接口返回时输出字段)**流程。也就是说前端传的这两个值根本没被注入到newCode对象里,而int基础类型的默认值就是0,所以不管输入什么,打印出来都是0。 - 额外隐患:前端通过DOM获取的input输入值默认是字符串类型,虽然Jackson默认支持字符串转数字,但如果输入非数字内容会直接报类型转换错误。
修复步骤
1. 调整实体类注解逻辑
你加@JsonIgnore的需求应该是接口返回给前端时不暴露这两个字段,不需要在字段层面全局加忽略,改成只在返回(序列化)阶段忽略即可,两种改法选一种就行:
改法1:注解加在get方法上
删掉字段上的@JsonIgnore,只在对应的getter方法上加注解,setter方法保持正常,这样反序列化赋值时能正常调用set方法,返回时get方法被忽略就不会输出字段:
@Column(name = "left_time") private int time; @Column(name = "left_view") private int view; // 其余字段、构造方法保持不变 @JsonIgnore public int getTime() { return time; } public void setTime(int time) { this.time = time; } @JsonIgnore public int getView() { return view; } public void setView(int view) { this.view = view; }
改法2:用JsonProperty控制访问级别(更简洁)
直接在字段上用@JsonProperty指定访问权限为只写,效果和上面完全一致,代码更整洁:
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY) @Column(name = "left_time") private int time; @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) @Column(name = "left_view") private int view;
2. 前端传参做类型转换
修改JS中组装参数的逻辑,把输入的字符串转成整数,同时做空值兜底,避免类型转换异常:
let object = { "code": document.getElementById("code_snippet").value, "time": parseInt(document.getElementById("time_restriction").value) || 0, "view": parseInt(document.getElementById("view_restriction").value) || 0 };
改完重启服务,再调用接口就能正常获取到time和view的输入值了。
内容的提问来源于stack exchange,提问作者user15596182
相关产品推荐
相关产品推荐

