Skip to content
Advertisement

How to pass an a single parameter in JSON body and why am I having an exception doing that?

Here is the code I have:

@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public void create(@AuthenticationPrincipal AuthenticatedUser authenticatedUser,
                   @RequestBody Integer restaurantId) {
    voteService.addVote(authenticatedUser.getUser(), restaurantId);
}

Here is the JSON body I pass to this method

{
        "restaurantId":1
}

Here is the exception:

    "JSON parse error: Cannot deserialize value of type `java.lang.Integer` from Object value (token `JsonToken.START_OBJECT`);
 nested exception is com.fasterxml.jackson.databind.

If I change value to String like this:

    @PostMapping
@ResponseStatus(HttpStatus.CREATED)
public void create(@AuthenticationPrincipal AuthenticatedUser authenticatedUser,
                   @RequestBody String restaurantId) {
    voteService.addVote(authenticatedUser.getUser(), Integer.parseInt(restaurantId));
}

I have this error:

    java.lang.NumberFormatException: For input string: "{
"restaurantId":1
}"
    at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68) ~[na:na]

The question is how can I pass a single parameter in JSON body and why do I have these exceptions?

I do appreciate your answers a lot!

Advertisement

Answer

You could use @PathVariable or @RequestParam to accept the restautantid.

@PostMapping(value="/{restaurant_id}")
@ResponseStatus(HttpStatus.CREATED)
public void create(@AuthenticationPrincipal AuthenticatedUser authenticatedUser,
                   @PathVariable("restaurant_id") Integer restaurantId) {
    voteService.addVote(authenticatedUser.getUser(), Integer.parseInt(restaurantId));
}

Sample Request

curl -X POST  http://localhost/api/restaurants/2
User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement