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 1
@gbj OK,有值的情况下又不一样了,这个涉及到属性命名策略( PropertyNamingStrategy )以及你使用的是什么 JSON 库,如果你使用的是 SpringBoot 默认没有配置的话,那么默认用的是 Jackson,命名策略好像是骆峰式。
你让前端把字段名大小写改一下,或者使用 @JsonProperty 注解你的 VO 字段。 |
12
hafuhafu 2021-04-15 15:50:00 +08:00 1
|
13
justicelove 2021-04-15 15:50:48 +08:00
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 注解。
|