QUARKUS - MicroProfile REST Client: add a custom, not mapped field

936 views Asked by At

I am following this article https://quarkus.io/guides/rest-client to build a REST Client to parse the output from the restcountries.eu service. Here the class holding the model:

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;
    }
}

Now, suppose I would like to add a custom fields such as timestamp, to record the instant when this object has been created. I imagine, I would go ahead and add another field like below:

 public class Country {
    
        public String name;
        public String alpha2Code;
        public String capital;
        public List<Currency> currencies;
        public Instant timestamp;  //<--------- added attribute
       [....]

My question is: how do I tell the client to populate that field? Normally, I would have done it in the constructor. However, I could not find docs that explain this part.

Thanks for your help

Simone

1

There are 1 answers

0
Oliver Marienfeld On BEST ANSWER

You can actually do this in the default constructor. Frameworks like JSONB or Jackson expect POJOs to have a default constructor. They will call it when they create an instance of Country.

Use the @JsonbTransient or @JsonIgnore annotations to mark that attribute of your POJO as ignorable in order to avoid the unmarshaller complaining about attributes that cannot be found in the response.

 @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 The @Data annotation is something you should consider using. Encapsulation is not a bad thing but creating getters/setters is tedious. But Project Lombok certainly helps here.