spring mvc 返回http 406

widely 发布于 2014/06/26 16:31
阅读 1K+
收藏 1
@RequestMapping(method=RequestMethod.POST,value="/image",
  consumes="application/json",produces=MediaType.IMAGE_JPEG_VALUE)
  public  @ResponseBody Object getImage(@RequestBody ParamsImage image) {
//    System.out.println(image.getCode());
    ResponseEntity<InputStream> entity = map.remove(image.getCode());
    System.out.println(entity);
   // return "{\"my\":\" name \"}";
    return entity;
  }

我想通过上面的方法返回一个图片的流。访问报http 406 错误,配置如下:

<mvc:annotation-driven />
	<bean class="org.springframework.web.servlet.mvc.
	annotation.AnnotationMethodHandlerAdapter">
		<property name="messageConverters">
			<list>
				<bean class="org.springframework.http.converter.
				StringHttpMessageConverter">
					<property name="supportedMediaTypes">
						<list>
							<value>text/plain;charset=UTF-8</value>
						</list>
					</property>
				</bean>
				<bean class="org.springframework.http.converter.
				json.MappingJacksonHttpMessageConverter" />
			</list>
		</property>
	</bean>



求高手解答啊。




加载中
0
天书
你的思路不错,我今天也是想这么干,我开始的想法是直接响应一个InputStream,实验之后失败.

最后查了几个帖子发现可以用byte数组的方式响应回客户端,现在已经OK了,当初自己咋就没想到呢。
        @RequestMapping(value="/load" )
        public @ResponseBody byte[] loadImg(HttpServletRequest request) throws IOException {
              InputStream in = request.getServletContext().getResourceAsStream("/images/DSC_0006.JPG" );
               return IOUtils.toByteArray(in);

       }

我参考的这个帖子:

http://stackoverflow.com/questions/5690228/spring-mvc-how-to-return-image-in-responsebody
另外需要注意你的mvc版本,版本之间差异较大,我用的4.0
0
len
len
这种情况下把返回值改成void 同时直接在方法中添加response,直接调用getoutputstream进行输出即可。
widely
widely
我就想返回一个流的数据 业务场景需要。我也没办法啊。
0
len
len
为了能在浏览器里能显示图片,而是不是变成下载,注意添加头信息。
widely
widely
HttpHeaders headers = new HttpHeaders(); headers.set("Cache-Control", "no-cache,max-age=60"); headers.setContentType(MediaType.IMAGE_JPEG); 这样添加的。不知道可不可以。
返回顶部
顶部