Spring 4 + @ControllerAdvice:对ResponseBody的Jsonp支持导致部署异常?

时间:2015-06-17 17:33:41

标签: json rest spring-mvc jsonp spring-4

我在SPRING4 + JDK 8 + STS 3.6.4中向REST服务添加JSONP支持

版本: 春季4.1.6.RELEASE

我的实施基于以下链接: http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-ann-jsonp

REST服务返回ResponseEntity或ResponseBody,用例是以JSONP格式返回数据。

添加了一个ControllerAdvice

@ControllerAdvice
public class JsonpCallbackAdvice extends AbstractJsonpResponseBodyAdvice {

    public JsonpCallbackAdvice(){
       super("Callback");
    }
}

这是REST服务的控制器

@Controller
public class AcctController {
 ...
   @RequestMapping(value = "/act/{actNum}", method = RequestMethod.GET)
public ResponseEntity<Account> getAccount(@PathVariable("actNum") Integer accountNum) throws Exception {
...
return new ResponseEntity<account>();
}

以下是相关的Web应用程序上下文配置

...
 <context:component-scan base-package="com.controllers" />
<bean name="jsonMessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
...

控制器和ControllerAdvice在同一个包中。

在观察到异常后开始部署项目

 Caused by: java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to java.lang.String
at org.springframework.context.annotation.AnnotationBeanNameGenerator.determineBeanNameFromAnnotation(AnnotationBeanNameGenerator.java:91)
at org.springframework.context.annotation.AnnotationBeanNameGenerator.generateBeanName(AnnotationBeanNameGenerator.java:69)
at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:246)
at org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(ComponentScanBeanDefinitionParser.java:84)
at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:74)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1427)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1417)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:174)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:144)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:100)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:510)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:392)

在添加ControllerAdvice之前未发生此异常。 此外,删除@ControllerAdvice批注时也不会发生这种情况 要么 组件扫描不包括ControllerAdvice类的扫描包

我尝试使用Spring版本4.2.0.RC1,但异常仍然存在。

请帮助解决此异常,因为在线提供的帮助不大。 这似乎是SPRING 4中的一个错误,但是我不确定。

0 个答案:

没有答案