Spring Web MVC: как использовать ResponseEntity в классе представления, а не в контроллере? - PullRequest
0 голосов
/ 22 сентября 2011

Используя 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 в классе представления, и если да, то почему?

Большое спасибо за вашу помощь!

1 Ответ

1 голос
/ 22 сентября 2011

В вашем AbstractView вы можете просто использовать объект HttpServletResponse, чтобы установить статус ответа HTTP и записать массив byte[] в выходной поток:

response.setStatus(status);
response.getOutputStream().write(byteData);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...