编辑响应正文中的字段名称
Edit field name in response body
我从第三方 api 从 REST 请求接收数据。
{"Category":
{"Name":"name123",
"Hint":"hint"},
...
但问题是字段名称以大写字母开头。
我认为一种解决方案可以是@JsonProperty("Category")
但这需要很多时间...
有很多关于这个问题的请求,这对我很有帮助。谢谢 ;)
您可以使用 Jackson 自定义 PropertyNamingStrategy:https://www.javacodegeeks.com/2013/04/how-to-use-propertynamingstrategy-in-jackson.html
根据您的情况,您将希望构建这样的策略:
import org.codehaus.jackson.map.MapperConfig;
import org.codehaus.jackson.map.PropertyNamingStrategy;
import org.codehaus.jackson.map.introspect.AnnotatedField;
import org.codehaus.jackson.map.introspect.AnnotatedMethod;
public class MyNameStrategy extends PropertyNamingStrategy
{
@Override
public String nameForField(MapperConfig
config,
AnnotatedField field, String defaultName) {
return convert(defaultName);
}
@Override
public String nameForGetterMethod(MapperConfig
config,
AnnotatedMethod method, String defaultName) {
return convert(defaultName);
}
@Override
public String nameForSetterMethod(MapperConfig
config,
AnnotatedMethod method, String defaultName) {
String a = convert(defaultName);
return a;
}
public String convert(String defaultName )
{
char[] arr = defaultName.toCharArray();
if(arr.length !=0)
{
if ( Character.isLowerCase(arr[0])){
char upper = Character.toUpperCase(arr[0]);
arr[0] = upper;
}
}
return new StringBuilder().append(arr).toString();
}
}
在 class 中你想要解析的 JSON,只需使用创建的策略:
ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(new MyNameStrategy());
我找到了解决方案。
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
QuestionnaireDto questionnaireDto = objectMapper.readValue(response.getBody().toString(), QuestionnaireDto.class);
我从第三方 api 从 REST 请求接收数据。
{"Category":
{"Name":"name123",
"Hint":"hint"},
... 但问题是字段名称以大写字母开头。
我认为一种解决方案可以是@JsonProperty("Category") 但这需要很多时间...
有很多关于这个问题的请求,这对我很有帮助。谢谢 ;)
您可以使用 Jackson 自定义 PropertyNamingStrategy:https://www.javacodegeeks.com/2013/04/how-to-use-propertynamingstrategy-in-jackson.html
根据您的情况,您将希望构建这样的策略:
import org.codehaus.jackson.map.MapperConfig;
import org.codehaus.jackson.map.PropertyNamingStrategy;
import org.codehaus.jackson.map.introspect.AnnotatedField;
import org.codehaus.jackson.map.introspect.AnnotatedMethod;
public class MyNameStrategy extends PropertyNamingStrategy
{
@Override
public String nameForField(MapperConfig
config,
AnnotatedField field, String defaultName) {
return convert(defaultName);
}
@Override
public String nameForGetterMethod(MapperConfig
config,
AnnotatedMethod method, String defaultName) {
return convert(defaultName);
}
@Override
public String nameForSetterMethod(MapperConfig
config,
AnnotatedMethod method, String defaultName) {
String a = convert(defaultName);
return a;
}
public String convert(String defaultName )
{
char[] arr = defaultName.toCharArray();
if(arr.length !=0)
{
if ( Character.isLowerCase(arr[0])){
char upper = Character.toUpperCase(arr[0]);
arr[0] = upper;
}
}
return new StringBuilder().append(arr).toString();
}
}
在 class 中你想要解析的 JSON,只需使用创建的策略:
ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(new MyNameStrategy());
我找到了解决方案。
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
QuestionnaireDto questionnaireDto = objectMapper.readValue(response.getBody().toString(), QuestionnaireDto.class);