使用 Lombok RequiredArgsConstructor 作为 JsonCreator
Using Lombok RequiredArgsConstructor as JsonCreator
我很想用这个:
@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
}
但是,我必须使用这个:
@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;
}
}
有什么方法可以将 Lombok 的 RequiredArgsConstructor 注释与 Jackson 的 JsonCreator 一起使用?问题似乎是古老的 Jackson 要求,即多参数构造函数中的每个参数都用 @JsonProperty 注释。我知道这是一件 Java 的事情(或者至少是一件 Java 8 的事情),Jackson 无法通过反射确定参数名称,所以注释必须存在,这样 Jackson 才能知道从哪里传递每个字段json 进入构造函数。可悲的是,它似乎是多余的。
我遇到了和你一样的问题,在这里找到了解决方案
https://projectlombok.org/features/constructor
To put annotations on the generated constructor, you can use
onConstructor=@__({@AnnotationsHere}), but be careful; this is an
experimental feature. For more details see the documentation on the
onX feature.
@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
}
即使我没有找到对此 @__(...)
的引用,我假设它会将注释转换为编译器的常量。
我很想用这个:
@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
}
但是,我必须使用这个:
@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;
}
}
有什么方法可以将 Lombok 的 RequiredArgsConstructor 注释与 Jackson 的 JsonCreator 一起使用?问题似乎是古老的 Jackson 要求,即多参数构造函数中的每个参数都用 @JsonProperty 注释。我知道这是一件 Java 的事情(或者至少是一件 Java 8 的事情),Jackson 无法通过反射确定参数名称,所以注释必须存在,这样 Jackson 才能知道从哪里传递每个字段json 进入构造函数。可悲的是,它似乎是多余的。
我遇到了和你一样的问题,在这里找到了解决方案 https://projectlombok.org/features/constructor
To put annotations on the generated constructor, you can use onConstructor=@__({@AnnotationsHere}), but be careful; this is an experimental feature. For more details see the documentation on the onX feature.
@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
}
即使我没有找到对此 @__(...)
的引用,我假设它会将注释转换为编译器的常量。