How to send Integer value in the form of JSON format and recieve in REST Controller?

Altaf Java picture Altaf Java · Nov 21, 2018 · Viewed 14.5k times · Source

I have one REST Controller where I have written this code

@PostMapping(value = "/otp")
public void otp(@RequestBody Integer mobile) {

    System.out.println(" Mobile = "+mobile);
}

And I am calling this method from Postman with the following inputs

URL : localhost:8080/otp

Body :

{
    "mobile":123456
}

But I am getting the following exception

org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Can not deserialize instance of java.lang.Integer out of START_OBJECT token; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.Integer out of START_OBJECT token

If I am taking String as a parameter like this

@PostMapping(value = "/otp")
public void otp(@RequestBody String mobile) {

    System.out.println(" Mobile = "+mobile);
}

And passing the inputs as

{
    "mobile":123456
}

Now it is printing in the console as follows

 Mobile = {
    "mobile":"123456"
}

But I want only this value 123456. How to achieve my requirement?

NOTE: I don't want to create any additional POJO class or even I don't want to send the data using query/path parameter.

Answer

Jaiwo99 picture Jaiwo99 · Nov 21, 2018

If you want to send your body like:

{
    "mobile":123456
}

You will create another object to receive the value.

But if you only want to accept the integer value without any other object, you will not put json object in request body, but only the integer itself.

Body:

12345