Spring boot Spring boot 1.5.8和jakson 2.10.0对象映射问题
我已经将spring boot 1.5.8上的jakson api从jakson 2.8.0升级到2.10.0,因为对象映射的行为不同 当我在具有propertyname cityCode的springboot控制器上传递请求正文时 示例jsonSpring 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
{
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策略。