[英]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.