SlandShow
@SlandShow
70% of my body is made of movies.

Почему поле не парсится и остаётся null?

Имею REST контроллер, который вытаскивает данные из базы (энтити) и заворачивает их в DTO, который сериализуются в JSON.
@GetMapping("/api/board/schedule/{id}")
    public ResponseEntity<?> getScheduleById(@PathVariable Long id) {
        ScheduleDTO schedule = scheduleService.getByIdScheduleDTO(id);

        LOGGER.info("RETRIEVED " + schedule + " SCHEDULER");
        return ResponseEntity.ok(schedule);
    }


Сначала вытаскиваю энтити:
INFO    2018-10-28 10:49:55,690 [http-nio-8080-exec-5] com.slandshow.service.Impl.ScheduleServiceImpl  - SELECTED BY ID = 147 SCHEDULE IS Schedule ( id: 147, 2018-10-30 20:04:51.0 → 2018-10-30 22:21:13.0, Yaztennaya → Laxta, train: Fenix )
INFO    2018-10-28 10:49:55,735 [http-nio-8080-exec-5] com.slandshow.controllers.BoardScheduleController  - RETRIEVED com.slandshow.DTO.ScheduleDTO@40a00de SCHEDULER


Затем уже сам контроллер возвращает мне завёрнутый JSON через DTO:
{"id":147,"stationDepartureName":"Yaztennaya","stationArrivalName":"Laxta","trainName":"Fenix","dateDeparture":"2018-10-30 20:04:51.0","dateArrival":"2018-10-30 22:21:13.0","price":0}


Итак, я хочу дессериализовать это дело.

Делается это через Jackson:
private String getResultResponse(String URL) {
        WebResource webResource = client.resource(URL);
        return webResource.accept(MediaType.APPLICATION_JSON).get(ClientResponse.class).getEntity(String.class);
}
 
// ...
ObjectMapper objectMapper = new ObjectMapper();
String json = getResultResponse(Utils.URL_SCHEDULE_BY_ID + 147);
        try {
            System.out.println(("PARSED -> " + objectMapper.readValue(json, Schedule.class)));
        } catch (IOException e) {
            e.printStackTrace();
}


Итак, казалось бы, всё ок. Но нет, Jackson не дессериализует одно поле trainName, не понимаю почему... Все остальные поля правильно парсятся.

Вот моя DTO, которую сериализую:
public class ScheduleDTO implements Serializable {

    private Long id;

    private String stationDepartureName;

    private String stationArrivalName;

    private String trainName;

    private String dateDeparture;

    private String dateArrival;

    private Integer price;

    public ScheduleDTO() {
    }

    public ScheduleDTO(String trainName) {
        this.trainName = trainName;
    }

    // Setters

    public void setId(Long id) {
        this.id = id;
    }

    public void setStationDepartureName(String stationDepartureName) {
        this.stationDepartureName = stationDepartureName;
    }

    public void setStationArrivalName(String stationArrivalName) {
        this.stationArrivalName = stationArrivalName;
    }

    public void setTrainName(String trainName) {
        this.trainName = trainName;
    }

    public void setDateDeparture(String dateDeparture) {
        this.dateDeparture = dateDeparture;
    }

    public void setDateArrival(String dateArrival) {
        this.dateArrival = dateArrival;
    }

    public void setPrice(Integer price) {
        this.price = price;
    }

    // Getters

    public Long getId() {
        return id;
    }

    public String getStationDepartureName() {
        return stationDepartureName;
    }

    public String getStationArrivalName() {
        return stationArrivalName;
    }

    public String getDateDeparture() {
        return dateDeparture;
    }

    public String getDateArrival() {
        return dateArrival;
    }

    public Integer getPrice() {
        return price;
    }

    public String getTrainName() {
        return trainName;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        ScheduleDTO that = (ScheduleDTO) o;

        return ((ScheduleDTO) o).trainName.equals(this.getTrainName());
    }

    @Override
    public int hashCode() {
        return trainName.hashCode();
    }
}


И вот модель Schedule, через которую я пытаюсь парсить Jackson'ом:
import java.io.Serializable;

public class Schedule implements Serializable {

    private Long id;

    private String dateDeparture;

    private String dateArrival;

    private String trainName;

    private String stationDepartureName;

    private String stationArrivalName;

    private Integer price;

    /* Getters & setters */
    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }

    public String getDateDeparture() { return dateDeparture; }
    public void setDateDeparture(String dateDeparture) { this.dateDeparture = dateDeparture; }

    public String getDateArrival() { return dateArrival; }
    public void setDateArrival(String dateArrival) { this.dateArrival = dateArrival; }

    public String getTrainName() { return trainName; }
    public void setTrainName(String train) { this.trainName = trainName; }

    public String getStationDepartureName() { return stationDepartureName; }
    public void setStationDepartureName(String stationDeparture) { this.stationDepartureName = stationDeparture; }

    public String getStationArrivalName() { return stationArrivalName; }
    public void setStationArrival(String stationArrival) { this.stationArrivalName = stationArrival; }

    public Integer getPrice() {
        return price;
    }
    public void setPrice(Integer price) {
        this.price = price;
    }
}


Что же я делаю не так?
  • Вопрос задан
  • 343 просмотра
Решения вопроса 1
Djaler
@Djaler
Сеньор-помидор
public void setTrainName(String train) { this.trainName = trainName; }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы