Joh*_*ote 3 java jackson lombok
我很想用这个:
@Getter
@ToString
@RequiredArgsConstructor(onConstructor_ = {@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)})
private static class RestErrorObject {
private final String error; // optional
private final String message; // optional
private final String path; // optional
private final String status; // optional
private final String timestamp; // optional
}
Run Code Online (Sandbox Code Playgroud)
但相反,我必须使用这个:
@Getter
@ToString
private static class RestErrorObject {
private final String error; // optional
private final String message; // optional
private final String path; // optional
private final String status; // optional
private final String timestamp; // optional
@JsonCreator
RestErrorObject(@JsonProperty("error") String error, @JsonProperty("message") String message,
@JsonProperty("path") String path, @JsonProperty("status") String status,
@JsonProperty("timestamp") String timestamp) {
this.error = error;
this.message = message;
this.path = path;
this.status = status;
this.timestamp = timestamp;
}
}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以将 Lombok 的 RequiredArgsConstructor 注释与 Jackson 的 JsonCreator 一起使用?问题似乎是杰克逊的古老要求,即多参数构造函数中的每个参数都用@JsonProperty 进行注释。我知道这是一个 Java 事物(或至少是 Java 8 事物),Jackson 无法通过反射确定参数名称,因此注释必须存在,以便 Jackson 知道将每个字段从 json 传递到构造函数的位置。这似乎是可悲的多余。
我遇到了和你一样的问题,在这里找到了解决方案 https://projectlombok.org/features/constructor
要将注释放在生成的构造函数上,可以使用 onConstructor=@__({@AnnotationsHere}),但要小心;这是一个实验性功能。有关更多详细信息,请参阅 onX 功能的文档。
@Getter
@ToString
@RequiredArgsConstructor(onConstructor=@__(@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)))
private static class RestErrorObject {
private final String error; // optional
private final String message; // optional
private final String path; // optional
private final String status; // optional
private final String timestamp; // optional
}
Run Code Online (Sandbox Code Playgroud)
即使我没有发现对 this 的引用@__(...),我也假设它会将注释转换为编译器的常量。
| 归档时间: |
|
| 查看次数: |
1204 次 |
| 最近记录: |