Java 小白求助,前端传的值在后端为 null。是我代码哪里搞错了吗 代码有点烂。

2021-04-15 15:12:48 +08:00
 gbj

1.前端传的值的格式是这样的

form: {score: [{},{},{}],mk: "XXX",mon: 1234567890}    

2.controller 如下

@PutMapping("/updateMk")
public void updateByMk(@RequestBody MkScoreListVo form){
    scoreService.updateByMk(form);
}

3.MkScoreListVo 里是这样的

@Data
public class MkScoreListVo  {

private List<MkScoreVo> score;  
private String mk;
private Long mon;
}

4.MkScoreVo 里是这样的

@Data
public class MkScoreVo {
private Integer INSTITUTION_NUMBER;
private BigDecimal SCORE01;                 
private BigDecimal score02;
private BigDecimal score03;
private BigDecimal score04;

}

这里大小写混用是之前我测试是不是因为字段不一样导致了问题。

5.java 在控制台直接打印接收到的 form,mk 和 mon 正常打印,score 里面却是 null

如下所示 省略了几个 score 。

MkScoreListVo(score=[MkScoreVo(INSTITUTION_NUMBER=null, SCORE01=null, score02=null, score03=null,               score04=null), mk=XXX, mon=1615789558639)
1267 次点击
所在节点    问与答
16 条回复
WhiteDragon96
2021-04-15 15:29:53 +08:00
为啥要用 PUT
timethinker
2021-04-15 15:30:38 +08:00
包装类型默认为 null,你这里 Integer 、BigDecimal 因为没有默认值,所以这个结果是符合预期的。
gbj
2021-04-15 15:31:21 +08:00
@WhiteDragon96 准备 update 的。不能用 put 吗
gbj
2021-04-15 15:33:07 +08:00
@qwe520liao 可前端这边 score 里是有值的,不知道为什么没传进去

{"score":[{"SCORE01":1,"SCORE02":1.5,"INSTITUTION_NUMBER":123456}],"mon":1615792717581,"mk":"XXX"}
WhiteDragon96
2021-04-15 15:33:11 +08:00
@gbj 你换成 POST 试试,前端也要改,这些听说有坑
guorui112
2021-04-15 15:35:11 +08:00
put 会不会接收不到参数,不太了解,delete 就只能接收 url 中的参数
gbj
2021-04-15 15:36:35 +08:00
@WhiteDragon96 改了还是一样的结果
gbj
2021-04-15 15:39:10 +08:00
@guorui112 改成 post 了,但还是一样
WhiteDragon96
2021-04-15 15:39:36 +08:00
@gbj 自己模拟条试下,是不是前端传的时候哪里错了
comstrojs
2021-04-15 15:42:26 +08:00
盲猜字段大写 Lombok@Data 生成的 getter setter 方法的原因
timethinker
2021-04-15 15:44:24 +08:00
@gbj OK,有值的情况下又不一样了,这个涉及到属性命名策略( PropertyNamingStrategy )以及你使用的是什么 JSON 库,如果你使用的是 SpringBoot 默认没有配置的话,那么默认用的是 Jackson,命名策略好像是骆峰式。

你让前端把字段名大小写改一下,或者使用 @JsonProperty 注解你的 VO 字段。
hafuhafu
2021-04-15 15:50:00 +08:00
@gbj #4
你这传的大小写都不一样,MkScoreVo 加 @JsonProperty("前端的 key")
justicelove
2021-04-15 15:50:48 +08:00
form data 和 request body 是不同的两个东西 是弄混了吗
guorui112
2021-04-15 15:52:53 +08:00
Java 对请求 x-www-form-urlencoded 和 json 的解析处理不一样,其他语言都做了处理,就 java 没做
gbj
2021-04-15 15:53:38 +08:00
@qwe520liao 解决了,谢谢大佬,因为之前前端给我的都是没有对象数组的,没用到过 JsonProperty 注解。
gbj
2021-04-15 15:56:13 +08:00
@hafuhafu
确实是这个问题,大小写是因为我之前 把实体类中的字段都改成了前端的字段,但是没用。于是就放那了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/770864

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX