MessageTemplate导致MVC控制器中没有转æ¢å™¨å‘现异常?

时间:2016-03-07 10:25:40

标签: string spring spring-mvc converter

related question

我正在从REST APIå‘SI消æ¯é€šé“å‘é€æ¶ˆæ¯ï¼Œè¯¥æ¶ˆæ¯é€šé“委托给å‘é€æ¶ˆæ¯é€‚é…器。消æ¯é€‚é…器å‘TCP客户端å‘é€æ¶ˆæ¯ã€‚什么都ä¸éœ€è¦è¿”回/回应。我的TCP客户端æˆåŠŸæ”¶åˆ°æ¶ˆæ¯ï¼Œä½†MVC控制器抛出异常

控制器代ç 

@Autowired
    MessageChannel invokeChannel;
    @RequestMapping(value="/invoke/{payload}")
    public ResponseEntity<String> sayHello(@PathVariable String payload)
    {
        //trigger gateway to send a message     
        MessagingTemplate template = new MessagingTemplate();       
        template.send(invokeChannel, new GenericMessage<String>(payload));      
        return new ResponseEntity<String>(payload, HttpStatus.OK);
    }

例外

  

java.lang.IllegalArgumentException:找ä¸åˆ°è¿”回的转æ¢å™¨   type的类型:class java.lang.String     org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:178)     org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor.handleReturnValue(HttpEntityMethodProcessor.java:183)     org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:80)     org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:126)     org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:814)     org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:737)     org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)     org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)     org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)     org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:969)     org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:860)     javax.servlet.http.HttpServlet.service(HttpServlet.java:622)     org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845)     javax.servlet.http.HttpServlet.service(HttpServlet.java:729)     org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

我无法找到导致此问题的地点和原因。我的return new ResponseEntity(...)断点未到达。

我的webmvcconfig

@EnableWebMvc
@Configuration
@ComponentScan({ "helloworldmvc" })
public class WebappConfig extends WebMvcConfigurerAdapter {

    @Bean
    public static PropertySourcesPlaceholderConfigurer propertyConfigIn() {
        return new PropertySourcesPlaceholderConfigurer();
    }

    @Override
    public void configureMessageConverters(
            List<HttpMessageConverter<?>> converters) {
        converters.add(new MongoMessageConverter());
    }
}

2 个答案:

答案 0 :(得分:1)

  

//触å‘网关å‘é€æ¶ˆæ¯

您应确ä¿template.send(invokeChannel)çš„æµé‡ç¡®å®žå•å‘。没有一个门户å¯ä»¥ç­‰å¾…那里的ä¾èµ–。这是你的评论:

  

我的return new ResponseEntity(...)断点未到达。

如果您无法访问该行代ç ï¼Œè¯·å°è¯•å®Œå…¨è°ƒè¯•AbstractMessageConverterMethodProces。并且需è¦å¼„清楚代ç ä¹‹åŽproducibleMediaTypes的原因:

    List<MediaType> producibleMediaTypes = getProducibleMediaTypes(servletRequest, clazz, type);

    if (value != null && producibleMediaTypes.isEmpty()) {
        throw new IllegalArgumentException("No converter found for return value of type: " + clazz);
    }

是空的。也许您请求使用一些与Stringä¸å…¼å®¹çš„Accept?或者你的WebMvcConfigurer以æŸç§æ–¹å¼è¦†ç›–List<HttpMessageConverter<?>> converters没有任何String-awere转æ¢å™¨ï¼Ÿ

答案 1 :(得分:1)

错误讯æ¯ï¼š

  

找ä¸åˆ°ç±»åž‹ä¸ºï¼šclass java.lang.String

的返回值的转æ¢å™¨

它说MVCä¸çŸ¥é“哪个converter用æ¥ä»Žè¿™ä¸ªæœåŠ¡è¿”回RESTå“应。使用春天å¯ç”¨çš„默认转æ¢å™¨ã€‚

  

请在方法签å中添加注释@ResposeBody。