
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) 1 WhiteDragon96 2021-04-15 15:29:53 +08:00 为啥要用 PUT |
2 timethinker 2021-04-15 15:30:38 +08:00 包装类型默认为 null,你这里 Integer 、BigDecimal 因为没有默认值,所以这个结果是符合预期的。 |
3 gbj OP @WhiteDragon96 准备 update 的。不能用 put 吗 |
4 gbj OP @qwe520liao 可前端这边 score 里是有值的,不知道为什么没传进去 {"score":[{"SCORE01":1,"SCORE02":1.5,"INSTITUTION_NUMBER":123456}],"mon":1615792717581,"mk":"XXX"} |
5 WhiteDragon96 2021-04-15 15:33:11 +08:00 @gbj 你换成 POST 试试,前端也要改,这些听说有坑 |
6 guorui112 2021-04-15 15:35:11 +08:00 put 会不会接收不到参数,不太了解,delete 就只能接收 url 中的参数 |
7 gbj OP @WhiteDragon96 改了还是一样的结果 |
9 WhiteDragon96 2021-04-15 15:39:36 +08:00 @gbj 自己模拟条试下,是不是前端传的时候哪里错了 |
10 comstrojs 2021-04-15 15:42:26 +08:00 盲猜字段大写 Lombok@Data 生成的 getter setter 方法的原因 |
11 timethinker 2021-04-15 15:44:24 +08:00 @gbj OK,有值的情况下又不一样了,这个涉及到属性命名策略( PropertyNamingStrategy )以及你使用的是什么 JSON 库,如果你使用的是 SpringBoot 默认没有配置的话,那么默认用的是 Jackson,命名策略好像是骆峰式。 你让前端把字段名大小写改一下,或者使用 @JsonProperty 注解你的 VO 字段。 |
12 hafuhafu 2021-04-15 15:50:00 +08:00 |
13 justicelove form data 和 request body 是不同的两个东西 是弄混了吗 |
14 guorui112 2021-04-15 15:52:53 +08:00 Java 对请求 x-www-form-urlencoded 和 json 的解析处理不一样,其他语言都做了处理,就 java 没做 |
15 gbj OP @qwe520liao 解决了,谢谢大佬,因为之前前端给我的都是没有对象数组的,没用到过 JsonProperty 注解。 |