/** * A shortcut for creating a {@code ResponseEntity} with the given body and * the status set to {@linkplain HttpStatus#OK OK}. * @return the created {@code ResponseEntity} * @since 4.1 */ public static <T> ResponseEntity<T> ok(T body) { BodyBuilder builder = ok(); return builder.body(body); }
@RequestMapping(params = "streamingJson") public ResponseEntity<StreamingResponseBody> getStreamingJson() { return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON_UTF8) .body(os -> os.write("{\"name\":\"Joe\",\"someDouble\":0.5}".getBytes(StandardCharsets.UTF_8))); }
private <T> ResponseEntity<T> createEntity(T body, HttpHeaders headers, int status) { HttpStatus resolvedStatus = HttpStatus.resolve(status); return resolvedStatus != null ? new ResponseEntity<>(body, headers, resolvedStatus) : ResponseEntity.status(status).headers(headers).body(body); }
@ExceptionHandler public ResponseEntity<Map<String, String>> handle(Spr16318Exception ex) { return ResponseEntity.status(500).body(Collections.singletonMap("reason", "error")); } }
@Test public void customStatusCode() { Integer entity = 42; ResponseEntity<Integer> responseEntity = ResponseEntity.status(299).body(entity); assertEquals(299, responseEntity.getStatusCodeValue()); assertEquals(entity, responseEntity.getBody()); }
@Test public void handleReturnValueEtag() throws Exception { String etagValue = "\"deadb33f8badf00d\""; MockServerWebExchange exchange = MockServerWebExchange.from(get("/path").ifNoneMatch(etagValue)); ResponseEntity<String> entity = ok().eTag(etagValue).body("body"); MethodParameter returnType = on(TestController.class).resolveReturnType(entity(String.class)); HandlerResult result = handlerResult(entity, returnType); this.resultHandler.handleResult(exchange, result).block(Duration.ofSeconds(5)); assertConditionalResponse(exchange, HttpStatus.NOT_MODIFIED, null, etagValue, Instant.MIN); }
@Test public void handleReturnValueLastModified() throws Exception { Instant currentTime = Instant.now().truncatedTo(ChronoUnit.SECONDS); Instant oneMinAgo = currentTime.minusSeconds(60); long timestamp = currentTime.toEpochMilli(); MockServerWebExchange exchange = MockServerWebExchange.from(get("/path").ifModifiedSince(timestamp)); ResponseEntity<String> entity = ok().lastModified(oneMinAgo.toEpochMilli()).body("body"); MethodParameter returnType = on(TestController.class).resolveReturnType(entity(String.class)); HandlerResult result = handlerResult(entity, returnType); this.resultHandler.handleResult(exchange, result).block(Duration.ofSeconds(5)); assertConditionalResponse(exchange, HttpStatus.NOT_MODIFIED, null, null, oneMinAgo); }
@Test //SPR-14767 public void shouldHandleValidatorHeadersInputResponses() throws Exception { servletRequest.setMethod("PUT"); String etagValue = "\"some-etag\""; ResponseEntity<String> returnValue = ResponseEntity.ok().header(HttpHeaders.ETAG, etagValue).body("body"); initStringMessageConversion(TEXT_PLAIN); processor.handleReturnValue(returnValue, returnTypeResponseEntity, mavContainer, webRequest); assertConditionalResponse(HttpStatus.OK, "body", etagValue, -1); }
@Test public void statusCodeAsInt() { Integer entity = 42; ResponseEntity<Integer> responseEntity = ResponseEntity.status(200).body(entity); assertEquals(200, responseEntity.getStatusCode().value()); assertEquals(entity, responseEntity.getBody()); }
@Test // SPR-17076 public void responseEntityFluxWithCustomHeader() throws Exception { EmitterProcessor<SimpleBean> processor = EmitterProcessor.create(); ResponseEntity<Flux<SimpleBean>> entity = ResponseEntity.ok().header("x-foo", "bar").body(processor); ResolvableType bodyType = forClassWithGenerics(Flux.class, SimpleBean.class); MethodParameter type = on(TestController.class).resolveReturnType(ResponseEntity.class, bodyType); this.handler.handleReturnValue(entity, type, this.mavContainer, this.webRequest); assertTrue(this.request.isAsyncStarted()); assertEquals(200, this.response.getStatus()); assertEquals("bar", this.response.getHeader("x-foo")); assertFalse(this.response.isCommitted()); }
@Test public void shouldHandleNotModifiedResponse() throws Exception { long currentTime = new Date().getTime(); long oneMinuteAgo = currentTime - (1000 * 60); String etagValue = "\"deadb33f8badf00d\""; ResponseEntity<String> returnValue = ResponseEntity.status(HttpStatus.NOT_MODIFIED) .eTag(etagValue).lastModified(oneMinuteAgo).body("body"); initStringMessageConversion(TEXT_PLAIN); processor.handleReturnValue(returnValue, returnTypeResponseEntity, mavContainer, webRequest); assertConditionalResponse(HttpStatus.NOT_MODIFIED, null, etagValue, oneMinuteAgo); }
@Test // SPR-14559 public void shouldHandleInvalidIfNoneMatchWithHttp200() throws Exception { String etagValue = "\"deadb33f8badf00d\""; servletRequest.addHeader(HttpHeaders.IF_NONE_MATCH, "unquoted"); ResponseEntity<String> returnValue = ResponseEntity.ok().eTag(etagValue).body("body"); initStringMessageConversion(TEXT_PLAIN); processor.handleReturnValue(returnValue, returnTypeResponseEntity, mavContainer, webRequest); assertConditionalResponse(HttpStatus.OK, "body", etagValue, -1); }
@Test public void createdLocation() throws URISyntaxException { URI location = new URI("location"); ResponseEntity<Void> responseEntity = ResponseEntity.created(location).build(); assertNotNull(responseEntity); assertEquals(HttpStatus.CREATED, responseEntity.getStatusCode()); assertTrue(responseEntity.getHeaders().containsKey("Location")); assertEquals(location.toString(), responseEntity.getHeaders().getFirst("Location")); assertNull(responseEntity.getBody()); ResponseEntity.created(location).header("MyResponseHeader", "MyValue").body("Hello World"); }
@GetMapping("/mono-response-entity-xml") public ResponseEntity<Mono<Person>> getMonoResponseEntityXml() { Mono<Person> body = Mono.just(new Person("Robert")); return ResponseEntity.ok().contentType(MediaType.APPLICATION_XML).body(body); }
@Override public ResponseEntity<T> extractData(ClientHttpResponse response) throws IOException { if (this.delegate != null) { T body = this.delegate.extractData(response); return ResponseEntity.status(response.getRawStatusCode()).headers(response.getHeaders()).body(body); } else { return ResponseEntity.status(response.getRawStatusCode()).headers(response.getHeaders()).build(); } } }
@GetMapping("/test-entity") public ResponseEntity<TestEntity> testEntity() { TestEntity entity = new TestEntity(); entity.setName("Foo Bar"); return ResponseEntity.ok().contentType(MediaType.APPLICATION_XML).body(entity); } }
@Test public void shouldNotFailPreconditionForPutRequests() throws Exception { servletRequest.setMethod("PUT"); ZonedDateTime dateTime = ofEpochMilli(new Date().getTime()).atZone(GMT); servletRequest.addHeader(HttpHeaders.IF_UNMODIFIED_SINCE, RFC_1123_DATE_TIME.format(dateTime)); long justModified = dateTime.plus(1, ChronoUnit.SECONDS).toEpochSecond() * 1000; ResponseEntity<String> returnValue = ResponseEntity.ok() .lastModified(justModified).body("body"); initStringMessageConversion(TEXT_PLAIN); processor.handleReturnValue(returnValue, returnTypeResponseEntity, mavContainer, webRequest); assertConditionalResponse(HttpStatus.OK, null, null, justModified); }
@ExceptionHandler public ResponseEntity<String> handle(IllegalStateException ex) { return ResponseEntity.status(400).body("Handled exception"); } }
@Test public void emptyCacheControl() { Integer entity = 42; ResponseEntity<Integer> responseEntity = ResponseEntity.status(HttpStatus.OK) .cacheControl(CacheControl.empty()) .body(entity); assertNotNull(responseEntity); assertEquals(HttpStatus.OK, responseEntity.getStatusCode()); assertFalse(responseEntity.getHeaders().containsKey(HttpHeaders.CACHE_CONTROL)); assertEquals(entity, responseEntity.getBody()); }
@Test public void unprocessableEntity() throws URISyntaxException { ResponseEntity<String> responseEntity = ResponseEntity.unprocessableEntity().body("error"); assertNotNull(responseEntity); assertEquals(HttpStatus.UNPROCESSABLE_ENTITY, responseEntity.getStatusCode()); assertEquals("error", responseEntity.getBody()); }