【发布时间】:2017-03-31 17:00:26
【问题描述】:
我尝试将 Gson 配置为我的 JSON 映射器以接受“snake_case”查询参数,并将它们转换为标准 Java “camelCase”参数。
首先,我知道我可以使用@SerializedName注解来自定义每个字段的序列化名称,但这会涉及一些手动工作。
经过一番搜索,我相信以下方法应该有效(如果我错了,请纠正我)。
- 使用 Gson 作为 Spring Boot 的默认 JSON 映射器
spring.http.converters.preferred-json-mapper=gson
在创建
GsonHttpMessageConverter之前配置Gson as described here根据GSON Field Naming Policy自定义步骤2中的Gson命名策略
private GsonHttpMessageConverter createGsonHttpMessageConverter() {
Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.create();
GsonHttpMessageConverter gsonConverter = new GsonHttpMessageConverter();
gsonConverter.setGson(gson);
return gsonConverter;
}
然后我像这样创建一个简单的控制器:
@RequestMapping(value = "/example/gson-naming-policy")
public Object testNamingPolicy(ExampleParam data) {
return data.getCamelCase();
}
使用以下Param 类:
import lombok.Data;
@Data
public class ExampleParam {
private String camelCase;
}
但是当我使用查询参数?camel_case=hello 调用控制器时,data.camelCase 无法填充(并且它为空)。当我将查询参数更改为?camelCase=hello 时,可以设置它,这意味着我的设置没有按预期工作。
任何提示将不胜感激。提前致谢!
【问题讨论】:
标签: spring-boot gson