Spring boot 1.5.8 с проблемой сопоставления объектов jakson 2.10.0 - PullRequest
0 голосов
/ 28 мая 2020

Я обновил jakson api при весенней загрузке 1.5.8 с jakson 2.8.0 до 2.10.0, с тех пор отображение объекта ведет себя по-другому.

когда я передаю тело запроса на контроллер Springboot с именем свойства Образец cityCode json

{ 
cityCode:DEL
}

при добавлении сопоставления jsonproperty работает нормально

@JsonProperty("cityCode")
private String cityCode;

, но когда я не добавляю аннотацию @JsonProperty, вместо этого он ищет CityCode. поскольку json передано по запросу, это

{ 
cityCode:DEL
}

it assing

object{cityCode=null}

пожалуйста, дайте мне знать, есть ли какое-либо свойство, которое мне нужно добавить при загрузке Spring

потому что в большинстве случаев я не хочу добавлять аннотацию @JsonProperty к полям класса

EDIT:

Я включаю log.level для трассировки, я видел какое-то сообщение, связанное с jackson

POJOPropertyBuilder - Невозможно создать экземпляр объекта Jackson 2.6. Использование более поздней версии jackson.

EDIT2:

Добавление класса образца модели

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 +
                '}';
    }
}

в методе контроллера передается как

@ApiParam(value = "This field specifies the list of requests", required = true) 
@Valid @RequestBody(required = true) CityRequest cityRequest

Ответы [ 3 ]

1 голос
/ 28 мая 2020

Я не пробовал, но, возможно, вы можете попробовать изменить стратегию именования на lowerCamelCase:

@JsonNaming(PropertyNamingStrategy.lowerCamelCase.class)
public class City {
    private String cityCode;
}
0 голосов
/ 01 июня 2020

Я использовал один java api в приложении с весенней загрузкой, где для стратегии именования объектов сопоставления установлено значение upper_camel_case.

, поскольку этот класс импортирован в приложение. java (@ SpringBootApplication) стратегия upper_camel_case является применяется глобально.

, чтобы исправить эту глобально наложенную стратегию upper_camel_case, я переопределил конфигурацию сопоставления объектов в приложении. java и удалил

objectMapper.setPropertyNamingStrategy(new UpperCamelCaseStrategy());

теперь я могу использовать стратегию именования по умолчанию для приложение.

0 голосов
/ 29 мая 2020

Возможно, вы захотите попробовать это как свойство приложения для глобальной настройки Джексона.

spring.jackson.property-naming-strategy=LOWER_CAMEL_CASE
...