QUARKUS-MicroProfile REST客户端:添加自定义未映射字段

问题描述

我正在关注本文https://quarkus.io/guides/rest-client,以构建一个REST Client来解析restcountries.eu服务的输出。 这里是持有模型的班级:

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
       [....]

我的问题是:如何告诉客户填写该字段?通常,我会在构造函数中完成此操作。但是,我找不到解释这一部分的文档。

感谢您的帮助

Simone

解决方法

您实际上可以在默认构造函数中执行此操作。 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注释是您应该考虑使用的注释。封装不是一件坏事,但是创建吸气剂/设置器是乏味的。但是Project Lombok在这里肯定有帮助。