#angular #spring-boot #rest #endpoint
#angular #spring-boot #остальное #конечная точка
Вопрос:
Я получаю, что требуемый строковый параметр отсутствует, когда я хочу вызвать свою конечную точку GET, и я не знаю, что не так с моим кодом:
Angular:
getFrameworkPolls(year: string, companyId: string) {
const params = new HttpParams();
params.append('year', year);
params.append('companyId', companyId);
return this.http.get<IFrameworkPoll[]>(`${this.url}/poll`, {params});
}
Весна:
@GetMapping("document/frameworks/poll")
public ResponseEntity<List<FrameworkPoll>> findFrameworksWithPolls(@RequestParam String year, @RequestParam String companyId) {
return pollFacade.findFrameworksWithPolls(year, companyId);
}
ОШИБКА:
29 Oct 2020;09:40:17.072 [http-nio-8081-exec-7] ERROR [c.i.e.e.e.GlobalExceptionHandler:78] In global Exception handler
org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'year' is not present
at org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.handleMissingValue(RequestParamMethodArgumentResolver.java:202)
at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:113)
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:126)
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:166)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)
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)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
Ответ №1:
HttpParams должен быть неизменяемым. Метод добавления не изменяет существующий экземпляр. Вместо этого они возвращают новые экземпляры с примененными изменениями, поэтому вам необходимо назначить, как показано ниже:
getFrameworkPolls(year: string, companyId: string) {
const params = new HttpParams();
params = params.append('year', year);
params = params.append('companyId', companyId);
return this.http.get<IFrameworkPoll[]>(`${this.url}/poll`, {params});
}