QUARKUS - MicroProfile REST 客户端:添加一个自定义的、未映射的字段
QUARKUS - MicroProfile REST Client: add a custom, not mapped field
我正在按照这篇文章 https://quarkus.io/guides/rest-client 构建一个 REST 客户端来解析 restcountries.eu 服务的输出。
这里 class 持有模型:
public class Country {
public String name;
public String alpha2Code;
public String capital;
public List<Currency> currencies;
public static class Currency {
public String code;
public String name;
public String symbol;
}
}
现在,假设我想添加一个自定义字段,例如时间戳,以记录创建此对象的瞬间。我想,我会继续添加另一个字段,如下所示:
public class Country {
public String name;
public String alpha2Code;
public String capital;
public List<Currency> currencies;
public Instant timestamp; //<--------- added attribute
[....]
我的问题是:如何让客户填写该字段?通常,我会在构造函数中完成它。但是,我找不到解释这部分的文档。
感谢您的帮助
西蒙
您实际上可以在 default 构造函数中执行此操作。 JSONB 或 Jackson 等框架期望 POJO 具有默认构造函数。他们将在创建 Country
.
的实例时调用它
使用 @JsonbTransient
或 @JsonIgnore
注释将 POJO 的该属性标记为可忽略,以避免解组器抱怨不能被忽略的属性在响应中找到。
@Data
public class Country {
private String name;
private String alpha2Code;
private String capital;
private List<Currency> currencies;
@JsonbTransient // if you're using JSONB (default in Quarkus)
@JsonIgnore // if you're using Jackson
private Instant timestamp;
public Country() {
this.timestamp = Instant.now();
}
PS 您应该考虑使用 @Data
注释。封装不是坏事,但创建 getters/setters 很乏味。但是 Project Lombok 在这里肯定有帮助。
我正在按照这篇文章 https://quarkus.io/guides/rest-client 构建一个 REST 客户端来解析 restcountries.eu 服务的输出。 这里 class 持有模型:
public class Country {
public String name;
public String alpha2Code;
public String capital;
public List<Currency> currencies;
public static class Currency {
public String code;
public String name;
public String symbol;
}
}
现在,假设我想添加一个自定义字段,例如时间戳,以记录创建此对象的瞬间。我想,我会继续添加另一个字段,如下所示:
public class Country {
public String name;
public String alpha2Code;
public String capital;
public List<Currency> currencies;
public Instant timestamp; //<--------- added attribute
[....]
我的问题是:如何让客户填写该字段?通常,我会在构造函数中完成它。但是,我找不到解释这部分的文档。
感谢您的帮助
西蒙
您实际上可以在 default 构造函数中执行此操作。 JSONB 或 Jackson 等框架期望 POJO 具有默认构造函数。他们将在创建 Country
.
使用 @JsonbTransient
或 @JsonIgnore
注释将 POJO 的该属性标记为可忽略,以避免解组器抱怨不能被忽略的属性在响应中找到。
@Data
public class Country {
private String name;
private String alpha2Code;
private String capital;
private List<Currency> currencies;
@JsonbTransient // if you're using JSONB (default in Quarkus)
@JsonIgnore // if you're using Jackson
private Instant timestamp;
public Country() {
this.timestamp = Instant.now();
}
PS 您应该考虑使用 @Data
注释。封装不是坏事,但创建 getters/setters 很乏味。但是 Project Lombok 在这里肯定有帮助。