Spring boot Spring boot 1.5.8和jakson 2.10.0对象映射问题

Spring boot Spring boot 1.5.8和jakson 2.10.0对象映射问题,spring-boot,fasterxml,Spring Boot,Fasterxml,我已经将spring boot 1.5.8上的jakson api从jakson 2.8.0升级到2.10.0,因为对象映射的行为不同 当我在具有propertyname cityCode的springboot控制器上传递请求正文时 示例json { cityCode:DEL } 添加jsonproperty映射时效果良好 @JsonProperty("cityCode") private String cityCode; 但是当我不添加@JsonProperty注释时 它寻找CityCo

我已经将spring boot 1.5.8上的jakson api从jakson 2.8.0升级到2.10.0,因为对象映射的行为不同

当我在具有propertyname cityCode的springboot控制器上传递请求正文时 示例json

{ 
cityCode:DEL
}
添加jsonproperty映射时效果良好

@JsonProperty("cityCode")
private String cityCode;
但是当我不添加@JsonProperty注释时 它寻找CityCode。 因为请求时传递的json是

{ 
cityCode:DEL
}
信息技术

object{cityCode=null}
请让我知道,如果有任何财产,我需要添加到春季开机

因为在我的大多数场景中,我不想将@JsonProperty注释添加到类字段中

编辑:

我启用log.level跟踪我看到一些与jackson有关的消息

POJOPropertyBuilder-无法实例化jackson 2.6对象。使用更高版本的jackson

编辑2:

添加示例模型类

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import java.io.Serializable;
import java.util.List;

@JsonIgnoreProperties(ignoreUnknown = true)
@ApiModel(value = "CityRequest")
public class CityRequest implements Serializable {
    private static final long serialVersionUID = 1L;

    @ApiModelProperty
    private String cityCode;

    @ApiModelProperty
    private String cityName;

    @ApiModelProperty
    private String area;

    @ApiModelProperty
    private List<String> areas;

    public String getCityCode() {
        return cityCode;
    }

    public void setCityCode(String cityCode) {
        this.cityCode = cityCode;
    }

    public String getCityName() {
        return cityName;
    }

    public void setCityName(String cityName) {
        this.cityName = cityName;
    }

    public String getArea() {
        return area;
    }

    public void setArea(String area) {
        this.area = area;
    }

    public List<String> getAreas() {
        return areas;
    }

    public void setAreas(List<String> areas) {
        this.areas = areas;
    }

    @Override
    public String toString() {
        return "CityRequest{" +
                "cityCode='" + cityCode + '\'' +
                ", cityName='" + cityName + '\'' +
                ", area='" + area + '\'' +
                ", areas=" + areas +
                '}';
    }
}

我没有尝试过,但您可以尝试将命名策略更改为lowerCamelCase:

@JsonNaming(PropertyNamingStrategy.lowerCamelCase.class)
公营城市{
私有字符串cityCode;
}

您可能希望尝试将其作为应用程序属性来全局配置Jackson

spring.jackson.property-naming-strategy=LOWER_CAMEL_CASE

我在spring boot应用程序中使用了一个JavaAPI,其中对象映射器命名策略设置为大写

由于该类是在App.java(@SpringBootApplication)上导入的,所以在全局范围内应用了upper\u camel\u策略

spring.jackson.property-naming-strategy=LOWER_CAMEL_CASE
为了修复这种全局强制的上例策略,我已经覆盖了App.java上的对象映射器配置并删除了它

objectMapper.setPropertyNamingStrategy(new UpperCamelCaseStrategy());

现在我可以在应用程序上使用默认命名策略了。

您的POJO有getter和setter吗?是的,POJO有getter setter。Spring Boot 1.5附带的Spring版本不支持Jackson 2.10或更高版本,您需要更新的Spring版本,因此需要更新的Spring Boot版本(2.2或更高,因为Jackson 2.10在那里被支持).Hi@M.Deinum,谢谢你的建议,将spring boot升级到2.2会解决问题吗?Hi@M.Deinum,我已经尝试将spring boot升级到2.2.6,但jackson映射仍然不起作用。Hi Paul,谢谢你的建议,但是没有这样的属性namingstrategy.lowerCamelCase.class我们可以直接使用注释@JsonNaming来使用lower\u case st st策略。