Различные поля с одинаковым атрибутом JsonProperty - PullRequest
1 голос
/ 30 апреля 2020

Возможно ли иметь что-то похожее ниже при сериализации JSON в том же классе

@JsonProperty("stats")
private StatsDetails statsDetails

@JsonProperty("stats")
private List<StatsDetails> statsDetailsList

, чтобы я мог иметь либо statsDetails, либо statsDetailsList, только один из них был включен при формировании json .

У меня также есть отдельный код JsonMapper, который преобразует эти данные pojo в json, который я здесь не включил.

1 Ответ

0 голосов
/ 30 апреля 2020

Вы не можете этого сделать. Это выдаст JsonMappingException Джексон не может знать, на какие поля вы ссылаетесь. Вы можете попробовать его самостоятельно с помощью следующего кода:

POJOClass:

import com.fasterxml.jackson.annotation.JsonGetter;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonSetter;

import java.util.List;

public class POJOClass {

    public POJOClass(String object) {
        this.object = object;
    }

    public POJOClass(List<String> objectList) {
        this.objectList = objectList;
    }

    @JsonProperty("object")
    public String object;

    @JsonProperty("object")
    public List<String> objectList;
    @JsonGetter("object")
    public String getObject() {
        return object;
    }

    @JsonGetter("object")
    public List<String> getObjectList() {
        return objectList;
    }

    @JsonSetter("object")
    public void setObject(String object) {
        this.object = object;
    }

    @JsonSetter("object")
    public void setObjectList(List<String> objectList) {
        this.objectList = objectList;
    }
}

Основной класс:

import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;
import java.util.Arrays;
import java.util.List;

public class MainClass {

    public static void main(String[] args) {
        String text = "f";
        List<String> list = Arrays.asList("a", "b", "c");
        ObjectMapper mapper = new ObjectMapper();
        try {
            String json = mapper.writeValueAsString(new POJOClass(text));
            String listJson = mapper.writeValueAsString(new POJOClass(list));
            System.out.println("json=" + json);
            System.out.println("listJson=" + listJson);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Выход:

com.fasterxml.jackson.databind.JsonMappingException: Multiple fields representing property "object": POJOClass#object vs POJOClass#objectList
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...