gpt4 book ai didi

java - 如何自定义Spring HttpMessageConverters生成的json响应

转载 作者:太空宇宙 更新时间:2023-11-04 13:48:49 25 4
gpt4 key购买 nike

我正在使用 spring @RestController 和 HttpMessageConverter 创建一个 REST Web 服务。

它在简单的场景中运行良好,其中我的 Controller 方法返回一些 POJO,并且 spring 使用“MappingJackson2HttpMessageConverter”将其转换为 JSON,如下所示:

{
"firstName": "John",
"lastName": "Smith",
}

但是 JSON 中的属性名称与我的 POJO 中的 getter 名称相同。我想动态修改 JSON 中的属性名称。

其实需求是根据逻辑修改JSON属性名称。例如,如果条件 X,则 JSON 中的属性名称应如下所示:

{
"fName": "John",
"lName": "Smith",
}

如果是 Y,那么 JSON 输出中的属性名称应该是其他类似的内容:

{
"MainName": "John",
"SecondName": "Smith",
}

因此属性名称不能与 pojo 绑定(bind),我也不能使用 @jsonproperty,因为这将是编译时,但我想在运行时更改。

有没有办法覆盖 MappingJackson2HttpMessageConverter 并把我的逻辑放在那里决定 json 属性名称?

最佳答案

您可以使用@JsonAnySetter @JsonAnyGetter注释。后面就可以使用Map实例了。如果您始终拥有一键对象,则可以使用 Collections.singletonMap 在其他情况下使用 HashMap 或其他实现。下面的示例展示了使用此方法是多么容易:

public class User {

private Map<String, String> values;

@JsonAnySetter
public void put(String key, String value) {
values = Collections.singletonMap(key, value);
}

@JsonAnyGetter
public Map<String, String> getValues() {
return values;
}

@Override
public String toString() {
return values.toString();
}
}

关于java - 如何自定义Spring HttpMessageConverters生成的json响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30536818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com