Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

@RequestBody is getting null values

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

like image 817
Geek Avatar asked Aug 13 '16 18:08

Geek


People also ask

Can a request body be null?

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.

What does @RequestBody do in Spring boot?

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.

What is @RequestBody in REST API?

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.


2 Answers

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.

like image 110
AmanSinghal Avatar answered Oct 20 '22 00:10

AmanSinghal


Check the @RequestBody import that will cause the problem.

It should be --> import org.springframework.web.bind.annotation.RequestBody;

like image 36
vedavyasa k Avatar answered Oct 19 '22 22:10

vedavyasa k