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

时间:2015-05-29 18:40:29

标签: java json spring-mvc

我正在使用spring @RestController和HttpMessageConverter创建一个rest webservice。

它适用于我的控制器方法返回一些POJO的简单场景,并使用“MappingJackson2HttpMessageConverter”将其转换为JSON,如下所示:

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

然而,JSON中的属性名称与我的POJO中的getter名称相同。我想动态地修改我的JSON中的属性名称。

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

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

如果是Y,那么JSON输出中的属性名称应该是:

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

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

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

1 个答案:

答案 0 :(得分: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();
    }
}