从Spring 3.1.0升级Spring 3.2.3,ConversionNotSupportedException

时间:2013-12-04 18:33:43

标签: java spring spring-mvc

我正在使用我的WebApp从Spring 3.1.0升级到Spring 3.2.3,我无法弄清楚为什么我会收到500错误。以下是我的代码片段:

@Controller("myController")
@RequestMapping("/")
@SessionAttributes({"myObject"})
public class MyController {
@RequestMapping(value="/submit.action", method=RequestMethod.POST)
public ModelAndView submit(
        @Validated @ModelAttribute("myObject") MyObject myObject
        , RedirectAttributes redirectAttributes
        , BindingResult bindingResult) 
{
    ModelAndView mav = new ModelAndView();

            if (bindingResult.hasErrors()) {
                mav.setViewName("redirect:/first.do");
                redirectAttributes.addFlashAttribute("errors", new HashMap<String, Object>(bindingResult.getModel());
                return mav;
            }
    mav.setViewName("redirect:/next.do");
    mav.addObject("myObject", myObject);

    return mav;
}

@RequestMapping(value="/first.do", method=RequestMethod.GET)
public ModelAndView show(
        @ModelAttribute("errors") HashMap<String, Object> errors) 
{
    ModelAndView mav = new ModelAndView();

            if(errors.size() > 0){
                mav.addAllObjects(errors);
            }
    mav.setViewName("first.jsp");
    mav.addObject("myObject", new MyObject());

    return mav;
}
}

MyObject是一个带有java.util.List属性的简单POJO,它实现了Serializable。出于某种原因,在返回ModelAndView后,DispatcherServlet会出现以下错误:

[12/4/13 12:33:53:177 EST] 00000030 webapp        E com.ibm.ws.webcontainer.webapp.WebApp logServletError SRVE0293E: [Servlet Error]-[myDispatcherServlet]: com.ibm.ws.webcontainer.webapp.WebAppErrorReport: SRVE0295E: Error reported: 500
at com.ibm.ws.webcontainer.webapp.WebAppDispatcherContext.sendError(WebAppDispatcherContext.java:626)
at com.ibm.ws.webcontainer.webapp.WebAppDispatcherContext.sendError(WebAppDispatcherContext.java:656)
at com.ibm.ws.webcontainer.srt.SRTServletResponse.sendError(SRTServletResponse.java:1236)
at com.ibm.ws.webcontainer.srt.SRTServletResponse.sendError(SRTServletResponse.java:1210)
at org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver.sendServerError(DefaultHandlerExceptionResolver.java:309)
at org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver.handleConversionNotSupported(DefaultHandlerExceptionResolver.java:297)
at org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver.doResolveException(DefaultHandlerExceptionResolver.java:130)
at org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.resolveException(AbstractHandlerExceptionResolver.java:136)
at org.springframework.web.servlet.DispatcherServlet.processHandlerException(DispatcherServlet.java:1148)
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:985)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:939)
at gov.treas.publicdebt.ie.web.filter.MyDispatcher.doDispatch(MyDispatcher.java:15)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:595)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1224)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:774)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:456)
at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:136)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:97)
at gov.treas.publicdebt.ie.web.filter.MyFilter.doFilter(MyFilter.java:67)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:928)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1025)
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3751)
at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:304)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:962)
at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:195)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:452)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:511)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305)
at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1690)

深入挖掘,我发现这是原因:

org.springframework.beans.ConversionNotSupportedException: Failed to convert value of type 'MyObject' to required type 'java.lang.String'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [MyObject] to required type [java.lang.String]: no matching editors or conversion strategy found

我无法弄清楚为什么它试图将MyObject转换为String。我没有使用Spring 3.1.0的任何问题,但切换到Spring 3.2.3迫使我的DispatcherServlet尝试转换MyObject。我真的不想为我的POJO注册一堆自定义编辑器。有没有人有任何想法?

另外 异常是在DispatchServlet类的doDispatch方法中捕获的。在catch块中,ex.printStackTrace()产生以下结果:

[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R org.springframework.beans.ConversionNotSupportedException: Failed to convert value of type 'MyObject' to required type 'java.lang.String'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [MyObject] to required type [java.lang.String]: no matching editors or conversion strategy found
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:71)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:39)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at org.springframework.validation.DataBinder.convertIfNecessary(DataBinder.java:589)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at org.springframework.web.servlet.mvc.support.RedirectAttributesModelMap.formatValue(RedirectAttributesModelMap.java:77)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at org.springframework.web.servlet.mvc.support.RedirectAttributesModelMap.addAttribute(RedirectAttributesModelMap.java:69)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at org.springframework.web.servlet.mvc.support.RedirectAttributesModelMap.addAllAttributes(RedirectAttributesModelMap.java:105)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at org.springframework.web.servlet.mvc.support.RedirectAttributesModelMap.addAllAttributes(RedirectAttributesModelMap.java:34)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at org.springframework.web.method.support.ModelAndViewContainer.addAllAttributes(ModelAndViewContainer.java:212)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at org.springframework.web.servlet.mvc.method.annotation.ModelAndViewMethodReturnValueHandler.handleReturnValue(ModelAndViewMethodReturnValueHandler.java:76)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:69)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:122)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at gov.treas.publicdebt.ie.web.filter.MyDispatcher.doDispatch(MyDispatcher.java:15)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at javax.servlet.http.HttpServlet.service(HttpServlet.java:595)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1224)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:774)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:456)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:136)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:97)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at gov.treas.publicdebt.ie.web.filter.UserTokenFilter.doFilter(UserTokenFilter.java:67)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:928)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1025)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:87)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:895)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:195)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:452)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:511)
[12/4/13 14:22:28:620 EST] 0000004e SystemErr     R     at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305)
[12/4/13 14:22:28:636 EST] 0000004e SystemErr     R     at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83)
[12/4/13 14:22:28:636 EST] 0000004e SystemErr     R     at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
[12/4/13 14:22:28:636 EST] 0000004e SystemErr     R     at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
[12/4/13 14:22:28:636 EST] 0000004e SystemErr     R     at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
[12/4/13 14:22:28:636 EST] 0000004e SystemErr     R     at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
[12/4/13 14:22:28:636 EST] 0000004e SystemErr     R     at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
[12/4/13 14:22:28:636 EST] 0000004e SystemErr     R     at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
[12/4/13 14:22:28:636 EST] 0000004e SystemErr     R     at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
[12/4/13 14:22:28:636 EST] 0000004e SystemErr     R     at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1690)
[12/4/13 14:22:28:636 EST] 0000004e SystemErr     R Caused by: java.lang.IllegalStateException: Cannot convert value of type [MyObject] to required type [java.lang.String]: no matching editors or conversion strategy found
[12/4/13 14:22:28:636 EST] 0000004e SystemErr     R     at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:264)
[12/4/13 14:22:28:636 EST] 0000004e SystemErr     R     at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:93)
[12/4/13 14:22:28:636 EST] 0000004e SystemErr     R     at org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:61)
[12/4/13 14:22:28:636 EST] 0000004e SystemErr     R     ... 48 more

更新:添加了其他代码以更好地定义用例。我的错误......

0 个答案:

没有答案