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)
此刻的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 }
問題:
此刻的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 }
如此 就可以將true作為JSON數據返回給前台了