繁体   English   中英

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

[英]How to customize json response generated by Spring HttpMessageConverters

我正在使用 spring @RestController 和 HttpMessageConverter 创建一个休息网络服务。

对于我的控制器方法返回一些 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,我也不能使用 @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();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM