首页 文章

尝试将数据从js发布到spring boot controller

提问于
浏览
0

我正试图从这个js发布我的数据

$.ajax({
        type: 'POST',
        url: '/url',
        data: {
            arr: tdValues
        },
        success: function () {
            location.reload();
        }
    });

控制器中的所有代码都可以正常工作,来自js的数据不是空的

@PostMapping("/url")
 public ModelAndView deleteQuestions(@RequestParam(value = "arr[]") String[] tdValues) {
 ModelAndView modelAndView = new ModelAndView();
 modelAndView.setViewName("page");
 return modelAndView;
}

但在那之后,我得到了例外

Required String[] parameter 'arr[]' is not present

有任何建议如何解决?

堆栈跟踪:

必需String []参数'arr'不存在; org.springframework.web.bind.MissingServletRequestParameterException:必需String []参数'arr'不存在于org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.handleMissingValue(RequestParamMethodArgumentResolver) .java:198)atg.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:109)org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)at org . springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:158)位于org.springframework.web.servlet.mvc的org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:128) . org.s的method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97) pringframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)at org . springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)位于org.springframework.web.servlet.DispatcherServlet的org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967) . doService(DispatcherServlet.java:901)在org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)在org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)在的javax.servlet .http.HttpServlet.service(HttpServlet.java:661)在org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)在javax.servlet.http.HttpServlet.service(HttpServlet.java:742)在org.apache.catalina.co re.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)在org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java: 52)在在org.springframework.security.web.FilterChainProxy在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)) $ VirtualFilterChain.doFilter(FilterChainProxy.java:317)在org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)在org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter (FilterSecurityInterceptor.java:91)在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:331)在org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFil ter.java:114)org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:331)org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)at org位于org.springframework.security.web.FilterChainProxy的org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)中的.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:331)位于org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy)的org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:158)上的$ VirtualFilterChain.doFilter(FilterChainProxy.java:331) .java:331)在org.springframework.s的org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170) ecurity.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:331)org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)at org.springframework.security.web.FilterChainProxy $ VirtualFilterChain . 在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:331)的org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200)中的doFilter(FilterChainProxy.java:331)在org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)atorg.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:331)在org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64)在org.springframework.web.filter . org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:331)中的OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 105)org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:331)org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)at org .springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java: 331)在org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214)在org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177)在org.springframework.web.filter.DelegatingFilterProxy .invokeDelegate(DelegatingFilterProxy.java:347)在org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:263)在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)在有机apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter . 的java:107)处org.springframework.w在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)) eb.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:108)位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java)的org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 193)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)at org.springframework.web.filter.OncePerRequestFilter .doFilter(OncePerRequestFilter.java:107)在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)在有机springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)在org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)在org.apache.catalina.co re.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)在org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478)在org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:140)在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)在org.apache . catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)在org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)在org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)在org.apache.coyote.AbstractProtocol $ ConnectionHandler.process(AbstractProtocol.j AVA:868)在org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1459)在org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)是java .util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:624)在org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run (TaskThread.java:61)在java.lang.Thread.run(Thread.java:748)

3 回答

  • 0

    将所需属性(设置为false)添加到@RequestParam .

    public ModelAndView deleteQuestions(@RequestParam(required=false, value = "arr[]") String[] tdValues) {
    

    或者试试

    public ModelAndView deleteQuestions(@RequestParam(value = "arr") String[] tdValues) {
    
  • 0

    几个变化 .

    • 在您的Js代码中 .
    $.ajax({
        type: 'POST',
        url: '/url/?arr='+tdValues
        success: function () {
            location.reload();
        }
    });
    
    • 在控制器代码中,执行此操作 .
    public ModelAndView deleteQuestions(@RequestParam(value = "arr") String[] tdValues) {
    
  • 0

    用这种方式解决了我的问题:

    public @ResponseBody ModelAndView deleteQuestions(@RequestParam("arr") Optional<String[]> tdValues) {}
    

    $.ajax({
            type: 'POST',
            url: '/url?arr='+tdValues,
            error : function() {
                console.log("error");
            },
            success: function () {
                localation.reload()
            }
        });
    

相关问题