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

问题描述 投票:1回答:1

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

对于简单的情况,它的工作情况很好,在这种情况下,我的控制器方法返回了一些POJO,并使用“ MappingJackson2HttpMessageConverter”将spring转换为JSON,如下所示:

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

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

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

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

如果为Y,则JSON输出中的属性名称应类似于:

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

所以属性名称不能与pojo绑定,我也不能使用@jsonproperty,因为那将是编译时的时间,但我想在运行时进行更改。

是否有一种方法可以覆盖MappingJackson2HttpMessageConverter并让我的逻辑来决定json属性的名称?

java json spring-mvc
1个回答
0
投票

您可以使用@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();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.