Как правильно передать List <MyObject>в методе get? - PullRequest
0 голосов
/ 04 октября 2019

Я хочу передать список в методе get! Вот мой класс GeoPointRequest:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class GeoPointRequest {

    private Double lat;
    private Double lon;
}

Но когда я делаю это, у меня возникает исключение:

java.lang.NoSuchMethodException: java.util.List.<init>()
    at java.base/java.lang.Class.getConstructor0(Class.java:3350)
    at java.base/java.lang.Class.getDeclaredConstructor(Class.java:2554)
    at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.createAttribute(ModelAttributeMethodProcessor.java:216)
    at org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor.createAttribute(ServletModelAttributeMethodProcessor.java:84)
    at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:139)
    at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:127)
    at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:167)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1039)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)

И мой метод запроса выглядит так:

@GetMapping(value = "/getPointsByPolygon")
    public List<GeoPointModelResponse> getPointsByPolygon(List<GeoPointRequest> geoPointRequests) {
        return searchService.getPointsByPolygon(geoPointRequests);
    }

Я хочу построить что-то подобное - scheme//host:port/methodname?myObject=lat-lon,lat-lon, ....

Что я делаю не так? Как это можно исправить?

Ответы [ 2 ]

0 голосов
/ 04 октября 2019

Вам может потребоваться создать собственный конвертер и связать его с DataBinder Spring, чтобы иметь возможность преобразовывать переменные пути в пользовательский объект.

Из Документирование Spring - шаблоны URI:

Переменные URI автоматически преобразуются в соответствующий тип, либо возникает исключение TypeMismatchException. Простые типы (int, long, Date и т. Д.) Поддерживаются по умолчанию, и вы можете зарегистрировать поддержку для любого другого типа данных. См. Преобразование типов и DataBinder .

0 голосов
/ 04 октября 2019

@RequestBody может быть добавлено вместе с PutMapping или PostMapping. Поскольку вы используете GetMapping, к запросу не прикреплено тело. Так что вы можете попробовать с @RequestParam

public List<GeoPointModelResponse> getPointsByPolygon(List<GeoPointRequest> geoPointRequests)

и удалить @AllArgsConstructor и @NoArgsConstructor. Потому что @Data имеет @ToString, @EqualsAndHashCode, @Getter / @Setter and @RequiredArgsConstructor вместе

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