ResponseEntity represents the whole HTTP response: status code, headers, and body. As a result, we can use it to fully configure the HTTP response.
If we want to use it, we have to return it from the endpoint; Spring takes care of the rest.
ResponseEntity is a generic type. Consequently, we can use any type as the response body:
1 2 3 4 | @GetMapping ( "/hello" ) ResponseEntity<String> hello() { return new ResponseEntity<>( "Hello World!" , HttpStatus.OK); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | @GetMapping ( "/age" ) ResponseEntity<String> age( @RequestParam ( "yearOfBirth" ) int yearOfBirth) { if (isInFuture(yearOfBirth)) { return new ResponseEntity<>( "Year of birth cannot be in the future" , HttpStatus.BAD_REQUEST); } return new ResponseEntity<>( "Your age is " + calculateAge(yearOfBirth), HttpStatus.OK); } |
Additionally, we can set HTTP headers:
1 2 3 4 5 6 7 8 | @GetMapping ( "/customHeader" ) ResponseEntity<String> customHeader() { HttpHeaders headers = new HttpHeaders(); headers.add( "Custom-Header" , "foo" ); return new ResponseEntity<>( "Custom header set" , headers, HttpStatus.OK); } |
1 2 3 4 | @GetMapping ( "/hello" ) ResponseEntity<String> hello() { return ResponseEntity.ok( "Hello World!" ); } |
1 2 3 4 5 6 7 8 9 10 | @GetMapping ( "/age" ) ResponseEntity<String> age( @RequestParam ( "yearOfBirth" ) int yearOfBirth) { if (isInFuture(yearOfBirth)) { return ResponseEntity.badRequest() .body( "Year of birth cannot be in the future" ); } return ResponseEntity.status(HttpStatus.OK) .body( "Your age is " + calculateAge(yearOfBirth)); } |
1 2 3 4 5 6 | @GetMapping ( "/customHeader" ) ResponseEntity<String> customHeader() { return ResponseEntity.ok() .header( "Custom-Header" , "foo" ) .body( "Custom header set" ); } |