Issue
My webClient calls work fine with @GetMapping, but @DeleteMapping isn't even triggered. Here are the two methods I'm using:
//works
MyItem myItem = webClient.get()
.uri(url + "/items/" + tenant + "/" + itemId)
.accept(MediaType.APPLICATION_JSON)
.retrieve()
.bodyToMono(MyItem.class)
.block();
//returns without triggering the @DeleteMapping endpoint
Mono<Void> resp = webClient.delete()
.uri(url + "/items/" + tenant + "/" + itemId)
.retrieve()
.bodyToMono(Void.class)
.then();
The endpoints are:
@RestController
@RequestMapping("/items/{tenant}")
public class ItemController {
@GetMapping("/{id}")
public MyItem findById(@PathVariable String id, @PathVariable String tenant, Authentication auth) {
...
}
@DeleteMapping("/{id}")
public void deleteById(@PathVariable String id, @PathVariable String tenant, Authentication auth) {
...
// breakpoint somewhere here
...
}
}
When I try to delete an item I get no errors, no 405, no 400, no 403, nothing. The webClient call returns normally (with a MonoIgnorePublisher object), but the endpoint seems to not be triggered at all (I put a breakpoint inside the deleteById method, nothing happened).
Any clues why this is happening?
Solution
That stream:
Mono<Void> resp = webClient.delete()
.uri(url + "/items/" + tenant + "/" + itemId)
.retrieve()
.bodyToMono(Void.class)
.then();
is not subscribed, you have to use block() or subscribe() at the end of stream to perform delete request.
Answered By - Oskar
Answer Checked By - Marilyn (JavaFixing Volunteer)