我正在使用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属性的名称?
您可以使用@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();
}
}