Example usage for org.springframework.http.server ServerHttpResponse getBody

List of usage examples for org.springframework.http.server ServerHttpResponse getBody

Introduction

In this page you can find the example usage for org.springframework.http.server ServerHttpResponse getBody.

Prototype

OutputStream getBody() throws IOException;

Source Link

Document

Return the body of the message as an output stream.

Usage

From source file:org.springframework.web.cors.DefaultCorsProcessor.java

/**
 * Invoked when one of the CORS checks failed.
 * The default implementation sets the response status to 403 and writes
 * "Invalid CORS request" to the response.
 *//*from ww w  . j ava 2 s.  c  o  m*/
protected void rejectRequest(ServerHttpResponse response) throws IOException {
    response.setStatusCode(HttpStatus.FORBIDDEN);
    response.getBody().write("Invalid CORS request".getBytes(StandardCharsets.UTF_8));
}

From source file:org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitterReturnValueHandler.java

@Override
public void handleReturnValue(@Nullable Object returnValue, MethodParameter returnType,
        ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception {

    if (returnValue == null) {
        mavContainer.setRequestHandled(true);
        return;/*from  w ww  .j av  a2 s . co m*/
    }

    HttpServletResponse response = webRequest.getNativeResponse(HttpServletResponse.class);
    Assert.state(response != null, "No HttpServletResponse");
    ServerHttpResponse outputMessage = new ServletServerHttpResponse(response);

    if (returnValue instanceof ResponseEntity) {
        ResponseEntity<?> responseEntity = (ResponseEntity<?>) returnValue;
        response.setStatus(responseEntity.getStatusCodeValue());
        outputMessage.getHeaders().putAll(responseEntity.getHeaders());
        returnValue = responseEntity.getBody();
        returnType = returnType.nested();
        if (returnValue == null) {
            mavContainer.setRequestHandled(true);
            outputMessage.flush();
            return;
        }
    }

    ServletRequest request = webRequest.getNativeRequest(ServletRequest.class);
    Assert.state(request != null, "No ServletRequest");

    ResponseBodyEmitter emitter;
    if (returnValue instanceof ResponseBodyEmitter) {
        emitter = (ResponseBodyEmitter) returnValue;
    } else {
        emitter = this.reactiveHandler.handleValue(returnValue, returnType, mavContainer, webRequest);
        if (emitter == null) {
            // Not streaming..
            return;
        }
    }
    emitter.extendResponse(outputMessage);

    // At this point we know we're streaming..
    ShallowEtagHeaderFilter.disableContentCaching(request);

    // Commit the response and wrap to ignore further header changes
    outputMessage.getBody();
    outputMessage.flush();
    outputMessage = new StreamingServletServerHttpResponse(outputMessage);

    DeferredResult<?> deferredResult = new DeferredResult<>(emitter.getTimeout());
    WebAsyncUtils.getAsyncManager(webRequest).startDeferredResultProcessing(deferredResult, mavContainer);

    HttpMessageConvertingHandler handler = new HttpMessageConvertingHandler(outputMessage, deferredResult);
    emitter.initialize(handler);
}

From source file:org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBodyReturnValueHandler.java

@Override
public void handleReturnValue(Object returnValue, MethodParameter returnType,
        ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception {

    if (returnValue == null) {
        mavContainer.setRequestHandled(true);
        return;//from   www  .  j a  v  a2  s . co  m
    }

    HttpServletResponse response = webRequest.getNativeResponse(HttpServletResponse.class);
    ServerHttpResponse outputMessage = new ServletServerHttpResponse(response);

    if (ResponseEntity.class.isAssignableFrom(returnValue.getClass())) {
        ResponseEntity<?> responseEntity = (ResponseEntity<?>) returnValue;
        outputMessage.setStatusCode(responseEntity.getStatusCode());
        outputMessage.getHeaders().putAll(responseEntity.getHeaders());

        returnValue = responseEntity.getBody();
        if (returnValue == null) {
            mavContainer.setRequestHandled(true);
            return;
        }
    }

    Assert.isInstanceOf(StreamingResponseBody.class, returnValue);
    StreamingResponseBody streamingBody = (StreamingResponseBody) returnValue;

    Callable<Void> callable = new StreamingResponseBodyTask(outputMessage.getBody(), streamingBody);
    WebAsyncUtils.getAsyncManager(webRequest).startCallableProcessing(callable, mavContainer);
}

From source file:org.springframework.web.socket.server.DefaultHandshakeHandler.java

protected void handleInvalidUpgradeHeader(ServerHttpRequest request, ServerHttpResponse response)
        throws IOException {
    logger.debug("Invalid Upgrade header " + request.getHeaders().getUpgrade());
    response.setStatusCode(HttpStatus.BAD_REQUEST);
    response.getBody().write("Can \"Upgrade\" only to \"WebSocket\".".getBytes("UTF-8"));
}

From source file:org.springframework.web.socket.server.DefaultHandshakeHandler.java

protected void handleInvalidConnectHeader(ServerHttpRequest request, ServerHttpResponse response)
        throws IOException {
    logger.debug("Invalid Connection header " + request.getHeaders().getConnection());
    response.setStatusCode(HttpStatus.BAD_REQUEST);
    response.getBody().write("\"Connection\" must be \"upgrade\".".getBytes("UTF-8"));
}

From source file:org.springframework.web.socket.server.support.AbstractHandshakeHandler.java

protected void handleInvalidUpgradeHeader(ServerHttpRequest request, ServerHttpResponse response)
        throws IOException {
    if (logger.isErrorEnabled()) {
        logger.error("Handshake failed due to invalid Upgrade header: " + request.getHeaders().getUpgrade());
    }//from  ww w.  j  av a 2  s.  c om
    response.setStatusCode(HttpStatus.BAD_REQUEST);
    response.getBody().write("Can \"Upgrade\" only to \"WebSocket\".".getBytes(StandardCharsets.UTF_8));
}

From source file:org.springframework.web.socket.server.support.AbstractHandshakeHandler.java

protected void handleInvalidConnectHeader(ServerHttpRequest request, ServerHttpResponse response)
        throws IOException {
    if (logger.isErrorEnabled()) {
        logger.error(//from   w  w  w  . j  av a  2  s  .c  om
                "Handshake failed due to invalid Connection header " + request.getHeaders().getConnection());
    }
    response.setStatusCode(HttpStatus.BAD_REQUEST);
    response.getBody().write("\"Connection\" must be \"upgrade\".".getBytes(StandardCharsets.UTF_8));
}

From source file:org.springframework.web.socket.server.support.DefaultHandshakeHandler.java

protected void handleInvalidUpgradeHeader(ServerHttpRequest request, ServerHttpResponse response)
        throws IOException {
    if (logger.isErrorEnabled()) {
        logger.error("Handshake failed due to invalid Upgrade header: " + request.getHeaders().getUpgrade());
    }/* w  ww  .java2 s  . c  om*/
    response.setStatusCode(HttpStatus.BAD_REQUEST);
    response.getBody().write("Can \"Upgrade\" only to \"WebSocket\".".getBytes(UTF8_CHARSET));
}

From source file:org.springframework.web.socket.server.support.DefaultHandshakeHandler.java

protected void handleInvalidConnectHeader(ServerHttpRequest request, ServerHttpResponse response)
        throws IOException {
    if (logger.isErrorEnabled()) {
        logger.error(//w w  w.j  ava2  s.c om
                "Handshake failed due to invalid Connection header " + request.getHeaders().getConnection());
    }
    response.setStatusCode(HttpStatus.BAD_REQUEST);
    response.getBody().write("\"Connection\" must be \"upgrade\".".getBytes(UTF8_CHARSET));
}

From source file:org.springframework.web.socket.sockjs.AbstractSockJsService.java

/**
 * TODO/*from  ww  w .  ja  v a2 s .c om*/
 *
 * @param request
 * @param response
 * @param sockJsPath
 *
 * @throws Exception
 */
@Override
public final void handleRequest(ServerHttpRequest request, ServerHttpResponse response,
        WebSocketHandler handler) throws IOException, TransportErrorException {

    String sockJsPath = getSockJsPath(request);
    if (sockJsPath == null) {
        logger.warn("Could not determine SockJS path for URL \"" + request.getURI().getPath()
                + ". Consider setting validSockJsPrefixes.");
        response.setStatusCode(HttpStatus.NOT_FOUND);
        return;
    }

    logger.debug(request.getMethod() + " with SockJS path [" + sockJsPath + "]");

    try {
        request.getHeaders();
    } catch (IllegalArgumentException ex) {
        // Ignore invalid Content-Type (TODO)
    }

    try {
        if (sockJsPath.equals("") || sockJsPath.equals("/")) {
            response.getHeaders().setContentType(new MediaType("text", "plain", Charset.forName("UTF-8")));
            response.getBody().write("Welcome to SockJS!\n".getBytes("UTF-8"));
            return;
        } else if (sockJsPath.equals("/info")) {
            this.infoHandler.handle(request, response);
            return;
        } else if (sockJsPath.matches("/iframe[0-9-.a-z_]*.html")) {
            this.iframeHandler.handle(request, response);
            return;
        } else if (sockJsPath.equals("/websocket")) {
            handleRawWebSocketRequest(request, response, handler);
            return;
        }

        String[] pathSegments = StringUtils.tokenizeToStringArray(sockJsPath.substring(1), "/");
        if (pathSegments.length != 3) {
            logger.warn("Expected \"/{server}/{session}/{transport}\" but got \"" + sockJsPath + "\"");
            response.setStatusCode(HttpStatus.NOT_FOUND);
            return;
        }

        String serverId = pathSegments[0];
        String sessionId = pathSegments[1];
        String transport = pathSegments[2];

        if (!validateRequest(serverId, sessionId, transport)) {
            response.setStatusCode(HttpStatus.NOT_FOUND);
            return;
        }

        handleTransportRequest(request, response, sessionId, TransportType.fromValue(transport), handler);
    } finally {
        response.flush();
    }
}