【spring 注解 錯誤】使用controller 作為后台給前台ajax交互數據出錯


controller作為后台與前台的ajax進行交互,后台的方法處理完成返回一個boolean類型的值,想傳給前台用來判斷是否執行成功,BUT,問題來了:

 1 嚴重: Servlet.service() for servlet rest threw exception
 2 java.lang.IllegalArgumentException: Unknown return value type [java.lang.Boolean]
 3     at org.springframework.util.Assert.notNull(Assert.java:112)
 4     at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:70)
 5     at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:126)
 6     at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:777)
 7     at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:706)
 8     at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
 9     at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
10     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
11     at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
12     at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868)
13     at javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
14     at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
15     at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
16     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
17     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
18     at com.agen.util.LoginFilter.doFilter(LoginFilter.java:58)
19     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
20     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
21     at org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:150)
22     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
23     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
24     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
25     at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
26     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
27     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
28     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
29     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
30     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
31     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
32     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
33     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
34     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
35     at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:879)
36     at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:617)
37     at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1778)
38     at java.lang.Thread.run(Unknown Source)
View Code

 

此刻的controller的代碼是這樣的:

 1 @RequestMapping("/productAdd")
 2     
 3     public boolean productAdd(Product product){
 4         product.setProductId(UUID.randomUUID().toString());
 5         Criteria criteria  = getCurrentSession().createCriteria(Product.class);
 6         criteria.setProjection(Projections.max("productOrder"));
 7         Integer productOrder2 = productService.uniqueResultInt(criteria);
 8         Integer procuctOrder=1;
 9         if(productOrder2 == null){
10             product.setProductOrder(procuctOrder);
11         }else{
12             productOrder2++;
13             product.setProductOrder(productOrder2);
14         }
15         productService.save(product);
16         return true;
17     }
View Code

 

問題:

此刻的controller只能識別返回的true作為字符串,也就是URL去找對應的頁面,但是哪里有URL是這樣的。

分析問題:

而且我們是想把這個true作為返回值給前台的ajax來判斷的,如果為true則插入成功給個提示等等,所以我們不想讓這個true作為URL去返回,而是作為JSON格式的數據返回給前台

解決方法

我們需要給這個方法上加一個 spring的注解,讓方法返回一個json數據給前台   這個注解就是:@ResponseBody

 1 @RequestMapping("/productAdd")
 2     @ResponseBody
 3     public boolean productAdd(Product product){
 4         product.setProductId(UUID.randomUUID().toString());
 5         Criteria criteria  = getCurrentSession().createCriteria(Product.class);
 6         criteria.setProjection(Projections.max("productOrder"));
 7         Integer productOrder2 = productService.uniqueResultInt(criteria);
 8         Integer procuctOrder=1;
 9         if(productOrder2 == null){
10             product.setProductOrder(procuctOrder);
11         }else{
12             productOrder2++;
13             product.setProductOrder(productOrder2);
14         }
15         productService.save(product);
16         return true;
17     }
View Code

 

如此 就可以將true作為JSON數據返回給前台了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM