杰克逊去掉前导下划线
Jackson strips leading underscore
我们的 swagger 规范定义了一个 属性 _links.
places-result:
type: object
properties:
_links:
$ref: "#/components/schemas/links-underscore-type"
使用 swagger-codegen,我们看到这个名字最终出现在输出 class:
@JsonProperty("_links")
private LinksUnderscoreType _links = null;
@Schema(
description = ""
)
@Valid
public LinksUnderscoreType getLinks() {
return this._links;
}
但是,Jackson 添加了一个 属性,带和不带前导下划线:
{
"result": {
"links": {
"self": "http://localhost:8083/places?page=181",
"previous": "http://localhost:8083/places?page=180",
"first": "http://localhost:8083/places?page=0"
},
"_links": {
"self": "http://localhost:8083/places?page=181",
"previous": "http://localhost:8083/places?page=180",
"first": "http://localhost:8083/places?page=0"
}
}
因为它是一个 Spring 引导应用程序,我们应该能够使用这个 属性:
来影响命名策略
spring.jackson.property-naming-strategy: LOWER_CASE
None 的接受值似乎保留了指定的 属性 名称。
我们如何保留前导下划线?
原来非下划线的属性进来了,是因为被getter方法匹配到了。解决方法是不匹配getter方法。这可以在 Spring 引导配置中实现:
spring:
jackson:
mapper:
AUTO_DETECT_GETTERS: false
或者在代码中:
objectMapper.configure(MapperFeature.AUTO_DETECT_GETTERS, false);
我们的 swagger 规范定义了一个 属性 _links.
places-result:
type: object
properties:
_links:
$ref: "#/components/schemas/links-underscore-type"
使用 swagger-codegen,我们看到这个名字最终出现在输出 class:
@JsonProperty("_links")
private LinksUnderscoreType _links = null;
@Schema(
description = ""
)
@Valid
public LinksUnderscoreType getLinks() {
return this._links;
}
但是,Jackson 添加了一个 属性,带和不带前导下划线:
{
"result": {
"links": {
"self": "http://localhost:8083/places?page=181",
"previous": "http://localhost:8083/places?page=180",
"first": "http://localhost:8083/places?page=0"
},
"_links": {
"self": "http://localhost:8083/places?page=181",
"previous": "http://localhost:8083/places?page=180",
"first": "http://localhost:8083/places?page=0"
}
}
因为它是一个 Spring 引导应用程序,我们应该能够使用这个 属性:
来影响命名策略spring.jackson.property-naming-strategy: LOWER_CASE
None 的接受值似乎保留了指定的 属性 名称。
我们如何保留前导下划线?
原来非下划线的属性进来了,是因为被getter方法匹配到了。解决方法是不匹配getter方法。这可以在 Spring 引导配置中实现:
spring:
jackson:
mapper:
AUTO_DETECT_GETTERS: false
或者在代码中:
objectMapper.configure(MapperFeature.AUTO_DETECT_GETTERS, false);