@Override public String getMethodValue() { return req.method().name(); }
/** * Sets the {@link HttpMethod} of the request. * * @throws IllegalArgumentException if the specified {@link HttpMethod} is not same with the * {@link HttpMethod} of the {@link HttpRequest} you specified when * creating this builder. This exception is not thrown if you * created a builder with an {@link RpcRequest}. */ protected B method(HttpMethod method) { requireNonNull(method, "method"); if (request instanceof HttpRequest) { checkArgument(method == ((HttpRequest) request).method(), "method: %s (expected: same as request.method)", method); } else { this.method = method; } return self(); }
@Override public HttpService asService() { return (ctx, req) -> { switch (req.method()) { case HEAD: case GET: return HttpResponse.of(HttpStatus.NOT_FOUND); default: return HttpResponse.of(HttpStatus.METHOD_NOT_ALLOWED); } }; } }
/** * Sets the 'content-length' header to the response. */ private static void setContentLength(HttpRequest req, HttpHeaders headers, int contentLength) { // https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.4 // prohibits to send message body for below cases. // and in those cases, content should be empty. if (req.method() == HttpMethod.HEAD || ArmeriaHttpUtil.isContentAlwaysEmpty(headers.status())) { return; } headers.setInt(HttpHeaderNames.CONTENT_LENGTH, contentLength); }
/** * Returns {@code true} if the specified {@code request} is a CORS preflight request. */ public static boolean isCorsPreflightRequest(com.linecorp.armeria.common.HttpRequest request) { requireNonNull(request, "request"); return request.method() == HttpMethod.OPTIONS && request.headers().contains(HttpHeaderNames.ORIGIN) && request.headers().contains(HttpHeaderNames.ACCESS_CONTROL_REQUEST_METHOD); }
private HttpResponse execute(@Nullable EventLoop eventLoop, HttpRequest req) { final String concatPaths = concatPaths(uri().getRawPath(), req.path()); req.path(concatPaths); final PathAndQuery pathAndQuery = PathAndQuery.parse(concatPaths); if (pathAndQuery == null) { req.abort(); return HttpResponse.ofFailure(new IllegalArgumentException("invalid path: " + concatPaths)); } return execute(eventLoop, req.method(), pathAndQuery.path(), pathAndQuery.query(), null, req, (ctx, cause) -> { if (ctx != null && !ctx.log().isAvailable(RequestLogAvailability.REQUEST_START)) { // An exception is raised even before sending a request, so abort the request to // release the elements. req.abort(); } return HttpResponse.ofFailure(cause); }); }
final ArmeriaHttpTransport transport = new ArmeriaHttpTransport(req.method()); final HttpChannel httpChannel = new HttpChannel( connector,
public HttpResponse serve(ServiceRequestContext ctx, HttpRequest req) throws Exception { try { switch (req.method()) { case OPTIONS: return doOptions(ctx, req);
@Override public HttpResponse convertResponse(ServiceRequestContext ctx, Object resObj) throws Exception { try { final HttpRequest request = RequestContext.current().request(); final HttpData httpData = resObj.getClass() == Object.class ? EMPTY_RESULT : HttpData.of(Jackson.writeValueAsBytes(resObj)); return HttpResponse.of(HttpMethod.POST == request.method() ? HttpStatus.CREATED : HttpStatus.OK, MediaType.JSON_UTF_8, httpData); } catch (JsonProcessingException e) { return HttpApiUtil.newResponse(HttpStatus.INTERNAL_SERVER_ERROR, e); } } }
@Override public HttpResponse convertResponse(ServiceRequestContext ctx, Object resObj) throws Exception { try { final HttpRequest request = RequestContext.current().request(); if (HttpMethod.DELETE == request.method() || (resObj instanceof Iterable && Iterables.size((Iterable<?>) resObj) == 0)) { return HttpResponse.of(HttpStatus.NO_CONTENT); } final HttpData httpData = HttpData.of(Jackson.writeValueAsBytes(resObj)); return HttpResponse.of(HttpStatus.OK, MediaType.JSON_UTF_8, httpData); } catch (JsonProcessingException e) { logger.debug("Failed to convert a response:", e); return HttpApiUtil.newResponse(HttpStatus.INTERNAL_SERVER_ERROR, e); } } }
@Override public HttpResponse convertResponse(ServiceRequestContext ctx, HttpHeaders headers, @Nullable Object resObj, HttpHeaders trailingHeaders) throws Exception { try { final HttpRequest request = RequestContext.current().request(); if (resObj == null || HttpMethod.DELETE == request.method() || (resObj instanceof Iterable && Iterables.size((Iterable<?>) resObj) == 0)) { return HttpResponse.of(HttpStatus.NO_CONTENT); } final HttpHeaders resHeaders; if (headers.contentType() == null) { resHeaders = toMutableHeaders(headers); resHeaders.contentType(MediaType.JSON_UTF_8); } else { resHeaders = headers; } final HttpData httpData = HttpData.of(Jackson.writeValueAsBytes(resObj)); return HttpResponse.of(resHeaders, httpData, trailingHeaders); } catch (JsonProcessingException e) { logger.debug("Failed to convert a response:", e); return HttpApiUtil.newResponse(ctx, HttpStatus.INTERNAL_SERVER_ERROR, e); } } }
@Override public HttpResponse convertResponse(ServiceRequestContext ctx, HttpHeaders headers, @Nullable Object resObj, HttpHeaders trailingHeaders) throws Exception { try { final HttpRequest request = RequestContext.current().request(); final HttpData httpData = resObj != null && resObj.getClass() == Object.class ? EMPTY_RESULT : HttpData.of(Jackson.writeValueAsBytes(resObj)); final HttpHeaders httpHeaders = toMutableHeaders(headers); if (HttpMethod.POST == request.method()) { httpHeaders.status(HttpStatus.CREATED); } if (httpHeaders.contentType() == null) { httpHeaders.contentType(MediaType.JSON_UTF_8); } return HttpResponse.of(httpHeaders, httpData, trailingHeaders); } catch (JsonProcessingException e) { return HttpApiUtil.newResponse(ctx, HttpStatus.INTERNAL_SERVER_ERROR, e); } } }
@Override public HttpResponse convertResponse(ServiceRequestContext ctx, HttpHeaders headers, @Nullable Object resObj, HttpHeaders trailingHeaders) throws Exception { try { final HttpRequest request = RequestContext.current().request(); final HttpData httpData = resObj != null && resObj.getClass() == Object.class ? EMPTY_RESULT : HttpData.of(Jackson.writeValueAsBytes(resObj)); final HttpHeaders httpHeaders = toMutableHeaders(headers); if (HttpMethod.POST == request.method()) { httpHeaders.status(HttpStatus.CREATED); } if (httpHeaders.contentType() == null) { httpHeaders.contentType(MediaType.JSON_UTF_8); } return HttpResponse.of(httpHeaders, httpData, trailingHeaders); } catch (JsonProcessingException e) { return HttpApiUtil.newResponse(ctx, HttpStatus.INTERNAL_SERVER_ERROR, e); } } }
@Override public HttpResponse convertResponse(ServiceRequestContext ctx, HttpHeaders headers, @Nullable Object resObj, HttpHeaders trailingHeaders) throws Exception { try { final HttpRequest request = RequestContext.current().request(); if (resObj == null || HttpMethod.DELETE == request.method() || (resObj instanceof Iterable && Iterables.size((Iterable<?>) resObj) == 0)) { return HttpResponse.of(HttpStatus.NO_CONTENT); } final HttpHeaders resHeaders; if (headers.contentType() == null) { resHeaders = toMutableHeaders(headers); resHeaders.contentType(MediaType.JSON_UTF_8); } else { resHeaders = headers; } final HttpData httpData = HttpData.of(Jackson.writeValueAsBytes(resObj)); return HttpResponse.of(resHeaders, httpData, trailingHeaders); } catch (JsonProcessingException e) { logger.debug("Failed to convert a response:", e); return HttpApiUtil.newResponse(ctx, HttpStatus.INTERNAL_SERVER_ERROR, e); } } }