Reputation: 2220
I get required String parameter is not present when I want to invoke my GET endpoint and I don't know what's wrong with my code:
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});
}
Spring:
@GetMapping("document/frameworks/poll")
public ResponseEntity<List<FrameworkPoll>> findFrameworksWithPolls(@RequestParam String year, @RequestParam String companyId) {
return pollFacade.findFrameworksWithPolls(year, companyId);
}
ERROR:
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)
Upvotes: 1
Views: 1396
Reputation: 777
HttpParams is intended to be immutable. The append method don't modify the existing instance. Instead they return new instances, with the changes applied, hence you need to assign as below:
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});
}
Upvotes: 2