Spring @RequestBody Annotation
May 03, 2024
This page will walk through Spring @RequestBody
annotation example. The @RequestBody
is annotated at method parameter level to indicate that this method parameter will bound to web request body. The consumes attribute of @RequestMapping
can specify the media types acceptable to @RequestBody
parameter. The @RequestBody
can be used with HTTP methods POST, PUT etc. Hence we can use @RequestBody
parameter in the methods annotated with @PostMapping
and @PutMapping
etc.
On this page we will discuss using
@RequestBody
in detail with complete example.
Contents
1. Maven Dependency
Find the Maven dependency to run the example.<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
2. Using @RequestBody Annotation
To use@RequestBody
, annotate the method parameter with it.
@PostMapping(value = "book") public ResponseEntity<Book> addBook(@RequestBody Book book) { ------ }
book
parameter.
By default a controller method consumes all media types. We can specify the specific media type to be consumed by
@RequestBody
. To consume application/json
media-type, write code as following.
@PostMapping(value = "book", consumes = { MediaType.APPLICATION_JSON_VALUE }) public ResponseEntity<Book> addBook(@RequestBody Book book) { ------ }
application/xml
media-type, write code as following.
@PostMapping(value = "book", consumes = { MediaType.APPLICATION_XML_VALUE }) public ResponseEntity<Book> addBook(@RequestBody Book book) { ------ }
@RequestBody
with HTTP PUT method.
@PutMapping(value = "book", consumes = { MediaType.APPLICATION_JSON_VALUE }) public ResponseEntity<Book> updateBook(@RequestBody Book book) { ------ }
@RequestBody
to consume byte array.
@PostMapping(value = "send", consumes = { MediaType.APPLICATION_OCTET_STREAM_VALUE }) public String userData(@RequestBody byte[] data) { ------ }
3. Complete Example
BookController.javapackage com.concretepage.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.util.UriComponentsBuilder; import com.concretepage.domain.Book; import com.concretepage.service.BookService; @RestController public class BookController { @Autowired private BookService bookService; @PostMapping(value = "book", consumes = { MediaType.APPLICATION_JSON_VALUE }) public ResponseEntity<Book> addBook(@RequestBody Book book, UriComponentsBuilder builder) { bookService.addBook(book); HttpHeaders headers = new HttpHeaders(); headers.setLocation(builder.path("/book/{id}").buildAndExpand(book.getBookId()).toUri()); return new ResponseEntity<Book>(book, headers, HttpStatus.CREATED); } @PostMapping(value = "send", consumes = { MediaType.APPLICATION_OCTET_STREAM_VALUE }) public String userData(@RequestBody byte[] data) { bookService.userData(data); return "Data sent."; } }
package com.concretepage.domain; public class Book { private int bookId; private String name; private String writer; //Setters and Getters }
package com.concretepage.service; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import org.springframework.stereotype.Service; import com.concretepage.domain.Book; @Service public class BookService { public void addBook(Book book) { book.setBookId(101); } public void userData(byte[] data) { InputStream is = new ByteArrayInputStream(data); try { while (is.available() != 0) { System.out.print((char) is.read()); } } catch (IOException e) { e.printStackTrace(); } } }
RestClientUtil.java
package com.concretepage.client; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; import com.concretepage.domain.Book; public class RestClientUtil { public void addBookDemo() throws URISyntaxException { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); URI uri = new URI("http://localhost:8080/book"); Book book = new Book(); book.setName("Learning Spring"); book.setWriter("Krishna"); HttpEntity<Book> httpEntity = new HttpEntity<Book>(book, headers); RestTemplate restTemplate = new RestTemplate(); ResponseEntity<Book> responseEntity = restTemplate.exchange(uri, HttpMethod.POST, httpEntity, Book.class); System.out.println("Status Code: " + responseEntity.getStatusCode()); System.out.println("Location: " + responseEntity.getHeaders().getLocation()); } public void sendText() throws URISyntaxException, IOException { URI url = new URI("http://localhost:8080/send"); String msg = "Hello World!"; HttpEntity<byte[]> requestEntity = new HttpEntity<>(msg.getBytes()); RestTemplate restTemplate = new RestTemplate(); ResponseEntity<String> res = restTemplate.postForEntity(url, requestEntity, String.class); System.out.println(res.getStatusCodeValue()); System.out.println(res.getBody()); } public static void main(String args[]) throws URISyntaxException, IOException { RestClientUtil util = new RestClientUtil(); util.addBookDemo(); util.sendText(); } }
4. Run Application
Download the project and run the following command from root folder of the project using command prompt.mvn spring-boot:run