使用Spring Web MVC,我想使用ResponseEntity将字节发送回客户端。
例如,我可以这样做:
@RequestMapping(value = "/getMyBytes", method = RequestMethod.GET)
public ResponseEntity< byte[] > handleGetMyBytesRequest()
{
// Get bytes from somewhere...
byte[] byteData = ....
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.setContentType( MediaType.IMAGE_PNG );
responseHeaders.setContentLength( byteData.length );
return new ResponseEntity< byte[] >( byteData,
responseHeaders, HttpStatus.OK );
}
但现在控制器本身决定了如何将数据呈现给客户端。那不应该是观点的工作吗?
所以我的问题是,当我有这个视图类时:
public class DemoView extends AbstractView
{
@Override
protected void renderMergedOutputModel( Map< String, Object > model,
HttpServletRequest request, HttpServletResponse response ) throws Exception
{
bytes[] byteData = model.get( "byteData" );
// ???
}
}
当我想在那里使用ResponseEntity时,视图代码必须如何?
或者在视图类中使用ResponseEntity是没有意义的,如果是,为什么?
非常感谢你的帮助!
答案 0 :(得分:1)
在AbstractView
中,您只需使用HttpServletResponse
对象设置HTTP响应状态,并将byte[]
数组写入输出流:
response.setStatus(status);
response.getOutputStream().write(byteData);