I have created a simple REST service (POST). But when i call this service from postman @RequestBody is not receiving any values.
import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.ModelAndView; @RestController public class Add_Policy { @ResponseBody @RequestMapping(value = "/Add_Policy", headers = { "content-type=application/json" }, consumes = MediaType.APPLICATION_JSON_VALUE, method = RequestMethod.POST) public Policy GetIPCountry( @RequestBody Policy policy) { System.out.println("Check value: " + policy.getPolicyNumber()); return policy; } }
My java Bean object is like below:
public class Policy { private String PolicyNumber; private String Type; private String Tenture; private String SDate; private String HName; private String Age; public String getPolicyNumber() { return PolicyNumber; } public void setPolicyNumber(String policyNumber) { PolicyNumber = policyNumber; } public String getType() { return Type; } public void setType(String type) { Type = type; } public String getTenture() { return Tenture; }
System.out.println is printing a null as a value for PolicyNumber.
Please help me to resolve this issue.
JSON which i am passing in request body is
{ "PolicyNumber": "123", "Type": "Test", "Tenture": "10", "SDate": "10-July-2016", "HName": "Test User", "Age": "10" }
I have even set Content-Type
to application/json
in postman
body. The read-only body property of the Request interface contains a ReadableStream with the body contents that have been added to the request. Note that a request using the GET or HEAD method cannot have a body and null is return in these cases.
Simply put, the @RequestBody annotation maps the HttpRequest body to a transfer or domain object, enabling automatic deserialization of the inbound HttpRequest body onto a Java object. Spring automatically deserializes the JSON into a Java type, assuming an appropriate one is specified.
A request body is data sent by the client to your API. A response body is the data your API sends to the client. Your API almost always has to send a response body.
Try setting the first character of the properties in your JSON to lower case. Eg.
{ "policyNumber": "123", "type": "Test", "tenture": "10", "sDate": "10-July-2016", "hName": "Test User", "age": "10" }
Basically, Spring uses getter and setter to set the properties of the the bean object. And it takes the property of the JSON object, matches it with the setter of the same name. eg to set the policyNumber property it tries to find a setter with the name setpolicyNumber() in your bean class and use that to set the value of your bean object.
Check the @RequestBody import that will cause the problem.
It should be --> import org.springframework.web.bind.annotation.RequestBody;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With