В среде IDE не отображаются методы получения и установки, созданные Lombok для аннотируемого класса Джексона. - PullRequest
0 голосов
/ 21 мая 2019

Я использую версию сообщества Intellij Idea 2019.1.2 для своих проектов Java. У меня есть POJO с аннотацией Jackson 2.9.6, которая использует Lombok 1.18.0 для генерации геттеров и сеттеров для pojo. У меня есть некоторый «клиентский» код для десериализации образца текста Json в класс Pojo. Десериализация работает отлично, без каких-либо проблем компиляции, и файл класса для pojo фактически имеет все методы получения и установки. Но среда IDE не показывает никаких методов получения и установки pojo в коде "client".

Отмена кеширования среды IDE и ее перезапуск не решили проблему. Как узнать причину этой проблемы и устранить ее?

Образец Json:

{
    "id": "1234",
    "number" : 1,
    "items" : [
        {
            "item1" : "blah...more fields."
        },
        {
            "item2" : "blah...more fields."
        }
    ],
    "someBigObject:" : {
        "my_comment" : "i don't really care about validating this object.",
        "fields" : "more fields here",
        "objects" : "more objects here"
    },
    "message" : "hello"
}

Pojo для вышеупомянутого Json, генерируется http://www.jsonschema2pojo.org/:

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.NonNull;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
        "id",
        "number",
        "items",
        "someBigObject:",
        "message"
})
@Data
@NoArgsConstructor
public class Example {
    @JsonProperty("id")
    @NonNull public String id;
    @JsonProperty("number")
    public Long number;
    @JsonProperty("items")
    public List<Item> items = null;
    @JsonProperty("someBigObject:")
    public Object someBigObject;
    @JsonProperty("message")
    public String message;
    @JsonIgnore
    private Map<String, Object> additionalProperties = new HashMap<String, Object>();

    @JsonAnyGetter
    public Map<String, Object> getAdditionalProperties() {
        return this.additionalProperties;
    }

    @JsonAnySetter
    public void setAdditionalProperty(String name, Object value) {
        this.additionalProperties.put(name, value);
    }

    @JsonInclude(JsonInclude.Include.NON_NULL)
    @JsonPropertyOrder({
            "item1",
            "item2"
    })
    @Data
    @NoArgsConstructor
    public static class Item {
        @JsonProperty("item1")
        public String item1;
        @JsonProperty("item2")
        public String item2;
        @JsonIgnore
        private Map<String, Object> additionalProperties = new HashMap<String, Object>();

        @JsonAnyGetter
        public Map<String, Object> getAdditionalProperties() {
            return this.additionalProperties;
        }

        @JsonAnySetter
        public void setAdditionalProperty(String name, Object value) {
            this.additionalProperties.put(name, value);
        }
    }

}

Пример кода, чтобы попробовать вышеуказанное pojo:

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;

public class JunkTest {
    public static void main(String [] args) throws IOException {
        String json = "Put the json here !!!";
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);
        Example pojo = mapper.readValue(json, Example.class);
        pojo.getClass();//Cannot see any other getters and setters !
    }

}

1 Ответ

2 голосов
/ 21 мая 2019

Для решения этой проблемы вам необходимо:

1 - Плагин Lombok установлен в Intellij IDEA. https://projectlombok.org/setup/intellij

Добавьте плагин Lombok IntelliJ, чтобы добавить поддержку lombok для IntelliJ:

Перейдите в Файл> Настройки> Плагины Нажмите на Обзор репозиториев ... Поиск Lombok Плагин Нажмите на Установить плагин Перезапустите IntelliJ IDEA

2 - обработка аннотации включена для вашего проекта. См. - https://stackoverflow.com/a/27430992

...