Невозможно десериализовать экземпляр `java .lang.String` из токена START_OBJECT (Джексон) - PullRequest
1 голос
/ 20 марта 2020

Я хочу отправить JSON объект из моего angular 8 внешнего интерфейса в мой API весенней загрузки. Я новичок в этих рамках и немного растерялся.

У меня есть карта мира с листовкой, и я хочу отправить координаты многоугольника на мой бэкэнд.

Бэкэнд получает тело в виде строки, но я хочу создать объект с этими координатами (первый шаг, затем другие вещи).

Я ищу какое-то решение, но не нахожу подобные случаи.

Вот код =>

Angular:

getFeed(data): Observable<boolean> {
        var q = {coordinates:data};
        console.log(q);
        return this.http.get<Answer>(`${this.baseUrl}api/searchs?data=`+encodeURIComponent(JSON.stringify(q))).pipe(
            map(res => true),
            catchError(err => {
                console.error(err);
                return of(false);
            })
        );
    }

Spring ModelDTO: (проблема, конечно, не в ArrayList)

public class QueryDTO {
//  @JsonFormat(shape=JsonFormat.Shape.ARRAY)
    @JsonDeserialize(as=ArrayList.class)
    private ArrayList<String> coordinates=new ArrayList();
    public QueryDTO (ArrayList<String> coo) {
        this.coordinates=coo;
    }
    public QueryDTO() {}
    public ArrayList<String> getCoordinates() {
        return this.coordinates; 
    }

    public void setCoordinate(ArrayList<String> coo) {
        this.coordinates=coo;
    }

}

Spring Controller:

    @CrossOrigin(origins = "http://localhost:4200")
    @Produces("application/json")
    @RequestMapping(value = "/searchs")

    public Collection<SearchFeedDTO> getFeed(@RequestParam(value = "data") String data) throws JsonMappingException, JsonProcessingException {
        System.out.println(data);
        System.out.println("I'm here");
        final QueryDTO queryDTO = new ObjectMapper().readValue(data, QueryDTO.class);
        System.out.println("you");
        return null;
    }

Ошибка:

"Невозможно десериализовать экземпляр java.lang.String из токена START_OBJECT в координатах [Source: (String)" {" ": [{" лат ": +76,00542202728906," LNG ": - +71,76493508359451}, {" ш ": +62,96921913888247," LNG ": - 113,6539800675124}, {" ш ": 63,601007712290695," LNG ": - 56,583665780107154}]}" ; строка: 1, столбец: 17] (через цепочку ссылок: com.freemind.leaflet_test.Models.DTO.QueryDTO ["координаты"] -> java .util.ArrayList [0]) "* 1 024 *

Редактировать:

Обновлен контроллер:

    @CrossOrigin(origins = "http://localhost:4200")
    @Produces("application/json")
    @RequestMapping(value = "/searchs")

    public Collection<SearchFeedDTO> getFeed(@RequestParam(value = "data") QueryDTO data) throws JsonMappingException, JsonProcessingException {
        System.out.println(data);
        System.out.println("I'm here");
        return null;
    }

Класс координат:

@Getter
@Setter
public class CoordinateDTO {
    private int lat;
    private int lng;
    public CoordinateDTO() {}
}


public class QueryDTO {
//  @JsonFormat(shape=JsonFormat.Shape.ARRAY)
    @JsonDeserialize(as=ArrayList.class)
    private ArrayList<CoordinateDTO> coordinates=new ArrayList<CoordinateDTO>();
    public QueryDTO (ArrayList<CoordinateDTO> coo) {
        this.coordinates=coo;
    }
    public QueryDTO() {}
    public ArrayList<CoordinateDTO> getCoordinates() {
        return this.coordinates; 
    }

    public void setCoordinate(ArrayList<CoordinateDTO> coo) {
        this.coordinates=coo;
    }

}

новая ошибка: не удалось преобразовать значение типа 'java .lang.String' в требуемый тип 'com.freemind.leaflet_test.Models.DTO.QueryDTO'; вложенное исключение: java .lang.IllegalStateException: невозможно преобразовать значение типа 'java .lang.String' в требуемый тип 'com.freemind.leaflet_test.Models.DTO.QueryDTO': не найдено подходящих редакторов или стратегии преобразования

1 Ответ

0 голосов
/ 20 марта 2020

вам нужно только сделать следующее

const it= JSON.stringify(Object);

Теперь весной веб-сервис должен получить строку,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...