Could you help me to solve a problem with passing two objects through @RequestBody?
As far as I know you can’t pass 2 @RequestBody parameters, so I’ve created Tuple
class to store custom data.
In my case I need to pass a Book
object and int value in json representation. I’ve already tried different ways but each time it cannot be parsed aright.
@NoArgsConstructor @AllArgsConstructor @Getter @EqualsAndHashCode @ToString public final class Tuple<K, V> { private K key; private V value; }
I use Tuple
in this method.
@PutMapping("action/returnBook") public ResponseEntity<Void> returnBook(@RequestBody final Tuple<Long, Long> userIdBookInstanceId) { leasingHistoryService.returnBook(userIdBookInstanceId.getKey(), userIdBookInstanceId.getValue()); return new ResponseEntity<>(HttpStatus.OK); } @Entity @NoArgsConstructor @AllArgsConstructor @Getter @EqualsAndHashCode @ToString public final class Book { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; @ManyToOne(cascade = CascadeType.ALL, optional = false) private Author author; } @Entity @NoArgsConstructor @AllArgsConstructor @Getter @EqualsAndHashCode @ToString public final class Author { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; private String name; private LocalDate dateOfBirth; private String bio; }
What is the structure of the json that I should pass in the PUT
request?
Answer
I’ve found a way to do it. In this case it’s the following json:
{ "key" : { "title": "The Girl in the Spider's Web v17", "author": { "id": 2, "name": "Larsson", "dateOfBirth": "1954-08-15", "bio": "Author of the Millennium trilogy" } }, "value": 3 }