Я хочу отправить 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': не найдено подходящих редакторов или стратегии преобразования