我正在使用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属性名称?
答案 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();
}
}