我是一名初级网络开发人员
我不明白为什么authenticatedPgInfo返回NULL
以下是我的简单测试。
@RestController
public class InitController {
@PostMapping("/test")
public String test(@RequestBody AuthenticatedPgInfo authenticatedPgInfo) {
return "";
}
}
和
@Data
public class AuthenticatedPgInfo {
private int code;
private String message;
private List<AuthenticatedPg> result;
}
如果我将@Data更改为@Getter和@Setter,则authenticatedPgInfo将返回null 但是,当我删除@ Data,@ Getet ...(Lombok Annotation)并生成getter和setter时,它就可以了!!
我不明白为什么龙目岛会在这种情况下工作。 有人可以帮忙吗? 提前谢谢。
test.json
{
"result": [
{
"key": "rabbit",
"value": "3"
},
{
"key": "lion",
"value": "1"
}
],
"message": "success",
"code": 0
}
答案 0 :(得分:1)
Enable annotation processing
所有代码都按预期工作。谢谢你们!
答案 1 :(得分:0)
现在我自己复制了相同的例子 - @Data
注释只能按预期工作。
要将json序列化为对象,Jackson需要此对象的默认构造函数(即没有任何参数)或带参数和@JsonCreator
注释的构造函数。
默认情况下,如果任何其他构造函数不存在,Lombok会创建默认构造函数。杰克逊使用它。但也许在你的情况下出现了问题,所以你可以使用@JsonCreator
注释创建你的DTO,例如:
@Data
public class AuthenticatedPgInfo {
private int code;
private String message;
private List<AuthenticatedPg> result;
@JsonCreator
public AuthenticatedPgInfo(@JsonProperty("code") in code, @JsonProperty("mesage") String message, @JsonProperty("result") List<AuthenticatedPg> result) {
this.code = code;
this.message = message;
this.result = result;
}
}
答案 2 :(得分:0)
@Data annotation隐式包含@RequiredArgsConstructor,但不包含@NoArgsConstructor。由于Jackson需要一个无参数的构造函数,所以你需要提供一个。你可以通过简单地添加@NoArgsConstructor来实现对Lombok的支持。
@Data
@NoArgsConstructor
public class AuthenticatedPgInfo {
private int code;
private String message;
private List<AuthenticatedPg> result;
}