【问题标题】:Change default structure of JSON returned from Java controller更改从 Java 控制器返回的 JSON 的默认结构
【发布时间】:2019-08-28 06:04:24
【问题描述】:

我有一个控制器,它返回一个对象列表作为ResponseEntity,返回的JSON 格式如下:

[
  {
    “name”:”a”,
    “classes”:
    [
        “1”,”2”,”3”
    ]
  }]

我想把它改成以下格式:

[{“a”:[“1”,”2”,”3”]}]

我有一种预感,我必须创建自己的 JSON Object 并在一些 @JsonValue 注释的方法中返回它,但我不想这样做。

还有其他方法吗?

【问题讨论】:

  • 添加评论为什么你投票会很好,我需要帮助,因为我是 Java 新手,这就是我问的原因。
  • 我的错,修好了
  • {“a”:[“1”,”2”,”3”], “b”:[“1”,”2”,”3”]} 通过使用ResponseEntity of List<Map<String, List<String>>,您可以在自定义过滤器中更改控制器生成的响应。

标签: java json spring serialization jackson


【解决方案1】:

你有两个选择:

  1. 将对象转换为正确结构中的Map-s 列表。
  2. 编写自定义序列化程序。

在这种情况下,自定义序列化器应该很容易:

class PojoSerializer extends JsonSerializer<Pojo> {

    @Override
    public void serialize(Pojo value, JsonGenerator gen, SerializerProvider provider) throws IOException {
        gen.writeStartObject();
        gen.writeObjectField(value.getName(), value.getClasses());
        gen.writeEndObject();
    }
}

以及简单的用法:

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

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

public class JsonApp {

    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();
        mapper.enable(SerializationFeature.INDENT_OUTPUT);
        mapper.writeValue(System.out, Arrays.asList(new Pojo(), new Pojo()));
    }
}

@JsonSerialize(using = PojoSerializer.class)
class Pojo {
    private String name = "a";
    private List<String> classes = Arrays.asList("1", "2", "3");

    // getters, setters
}

打印:

[ {
  "a" : [ "1", "2", "3" ]
}, {
  "a" : [ "1", "2", "3" ]
} ]

【讨论】:

    猜你喜欢
    • 2011-01-02
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多