【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)

此刻的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数据返回给前台了

时间: 2024-10-10 22:30:23

【spring 注解 错误】使用controller 作为后台给前台ajax交互数据出错的相关文章

(转载)Spring 注解@Component,@Service,@Controller,@Repository

Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository.@Service 和 @Controller.在目前的 Spring 版本中,这 3 个注释和 @Component 是等效的,但是从注释类的命名上,很容易看出这 3 个注释分别和持久层.业务层和控制层(Web 层)相对应.虽然目前这 3 个注释和 @Component 相比没有什么新意,但 Spring 将在以后的版本中为它们添加特殊的功能.所以,如果 Web 应

Spring 注解@Component,@Service,@Controller,@Repository

Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository.@Service 和 @Controller.在目前的 Spring 版本中,这 3 个注释和 @Component 是等效的,但是从注释类的命名上,很容易看出这 3 个注释分别和持久层.业务层和控制层(Web 层)相对应.虽然目前这 3 个注释和 @Component 相比没有什么新意,但 Spring 将在以后的版本中为它们添加特殊的功能.所以,如果 Web 应

关于Spring注解 @Service @Component @Controller @Repository 用法

@Component 相当于实例化类的对象,其他三个注解可以理解为@Component的子注解或细化. 在annotaion配置注解中用@Component来表示一个通用注释用于说明一个类是一个spring容器管理的类,此类将有spring扫描并加入容器参与ioc.即就是该类已经拉入到spring的管理中了. 通过在 classpath 中通过自动扫描方式把组建纳入 spring 容器管理. 要使用自动扫描机制我们需要打开一下配置信息: Bean.xml代码    <?xml version= 

Spring注解@Component、@Repository、@Service、@Controller @Resource、@Autowired、@Qualifier 解析

URL:http://www.ulewo.com/user/10001/blog/273 我们在使用spring的时候经常会用到这些注解,那么这些注解到底有什么区别呢.我们先来看代码 同样分三层来看: Action 层: package com.ulewo.ioc; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @Co

Spring注解@Component、@Repository、@Service、@Controller区别

Spring注解@Component.@Repository.@Service.@Controller区别 Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository.@Service 和 @Controller.在目前的 Spring 版本中,这 3 个注释和 @Component 是等效的,但是从注释类的命名上,很容易看出这 3 个注释分别和持久层.业务层和控制层(Web 层)相对应.虽然目前这 3 个注释和 @Comp

Spring注解@Component、@Repository、@Service、@Controller的相关知识

Spring注解@Component.@Repository.@Service.@Controller区别 spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository.@Service 和 @Controller.在目前的 Spring 版本中,这 3 个注释和 @Component 是等效的,但是从注释类的命名上,很容易看出这 3 个注释分别和持久层.业务层和控制层(Web 层)相对应.虽然目前这 3 个注释和 @Comp

Spring中@Resource、@controller注解的含义

@Resource 注解被用来激活一个命名资源(named resource)的依赖注入,在JavaEE应用程序中,该注解被典型地转换为绑定于JNDI context中的一个对象. Spring确实支持使用@Resource通过JNDI lookup来解析对象,默认地,拥有与@Resource注解所提供名字相匹配的"bean name(bean名字)"的Spring管理对象会被注入. 在下面的例子中,Spring会向加了注解的setter方法传递bean名为"dataSour

基于注解的Spring MVC(所需jar包,web.xml配置,Spring文件配置,@Controller,@RequestMapping,@RequestParam,model填參,EL取值)

1.加入jar 2.web.xml配置: <?xml version="1.0" encoding="UTF-8"? > <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocati

Spring注解@Component、@Repository、@Service、@Controller @Resource、@Autowired、@Qualifier、@scope

以下内容摘自部分网友的,并加上了自己的理解 @Service用于标注业务层组件(我们通常定义的service层就用这个) @Controller用于标注控制层组件(如struts中的action.Spring MVC中的Controller) @Repository用于标注数据访问组件,即DAO组件 @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注. 这几个注解是当你需要定义某个类为一个bean,则在这个类的类名前一行使用@Service("XXX"),