title: Jersey consume JSON on POST
body: <p>I am trying to send some json data via jquery POST to a jersey REST service in my local machine.</p>
  
  <p>In my server side, I have Jersey method to consume this JSON which is POSTed.</p>
  
  <pre><code>@Path("/question")
  public class QuestionAPI {
  
  
      private final static Logger LOGGER = Logger.getLogger(HelloWorldApi.class .getName());
  
       @POST
       @Path("/askquestion")
       @Produces(MediaType.APPLICATION_JSON)
       @Consumes(MediaType.APPLICATION_JSON)
       public TQARequest askquestion(TQARequest tqaRequest, @Context HttpServletRequest request) {
  
           LOGGER.info("Inside--&gt;askquestion--&gt;TQARequest"+tqaRequest.getQuestion());
  
           return tqaRequest;
  
       }
  
  
  }
  </code></pre>
  
  <p>I am wrapping the json data in request. So that in server , I can get all data sent in request in that wrapper class. My wrapper class for request is </p>
  
  <pre><code>public class TQARequest {
  
      private Question question;
  
      public Question getQuestion() {
          return question;
      }
  
      public void setQuestion(Question question) {
          this.question = question;
      }
  
      @Override
      public String toString() {
          return "TQARequest [question=" + question + "]";
      }
  
  
  
  }
  </code></pre>
  
  <p>The Question pojo class</p>
  
  <pre><code>public class Question {
  
      @Id
      private Long questionID;
  
      private String questionText;
  
      private long createdOn;
  
      private String questionURL;
  
      private String questionTrackingURL;
  
      @Override
      public String toString() {
          return "Question [questionID=" + questionID + ", questionText="
                  + questionText + ", createdOn=" + createdOn + ", questionURL="
                  + questionURL + ", questionTrackingURL=" + questionTrackingURL
                  + "]";
      }
  
      public Question(String questionText, long createdOn, String questionURL,
              String questionTrackingURL) {
          super();
          this.questionText = questionText;
          this.createdOn = createdOn;
          this.questionURL = questionURL;
          this.questionTrackingURL = questionTrackingURL;
      }
  
      public Long getQuestionID() {
          return questionID;
      }
  
      public void setQuestionID(Long questionID) {
          this.questionID = questionID;
      }
  
      public String getQuestionText() {
          return questionText;
      }
  
      public void setQuestionText(String questionText) {
          this.questionText = questionText;
      }
  
      public long getCreatedOn() {
          return createdOn;
      }
  
      public void setCreatedOn(long createdOn) {
          this.createdOn = createdOn;
      }
  
      public String getQuestionURL() {
          return questionURL;
      }
  
      public void setQuestionURL(String questionURL) {
          this.questionURL = questionURL;
      }
  
      public String getQuestionTrackingURL() {
          return questionTrackingURL;
      }
  
      public void setQuestionTrackingURL(String questionTrackingURL) {
          this.questionTrackingURL = questionTrackingURL;
      }
  
      public Question(){
  
      }
  
  
  }
  </code></pre>
  
  <p>Whenever I make a request from the jquery as shown below , </p>
  
  <pre><code> function askQuestion(){
  
  
          $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                url: "/api/question/askquestion",
                data: 
                 JSON.stringify({
                     "tqaRequest" : {
                            "question" : {
                               "createdOn" : "sfddsf",
                               "questionText" : "fsdfsd",
                               "questionTrackingURL" : "http://www.google.com",
                               "questionURL" : "ssdf"
                            }
                         }
                      }
  
                       ),
                dataType: "json",
                success: function(response){
  
                    console.log(response);
  
                }
              });  
  
      }
  </code></pre>
  
  <p><strong>I get this error in the console :</strong></p>
  
  <pre><code>WARNING: /api/question/askquestion: org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "tqaRequest" (Class com.netsquid.tqa.entity.TQARequest), not marked as ignorable
   at [Source: org.mortbay.jetty.HttpParser$Input@899e3e; line: 1, column: 16] (through reference chain: com.netsquid.tqa.entity.TQARequest["tqaRequest"])
  </code></pre>
  
  <p>I can fix this by sending Question json from jquery and accepting question parameter in the method. <strong>But I need to wrap all the jquery requests in TQARequest and accept all the request as TQARequest and then extract the question object from it. How do I do this ?</strong></p>
  
  <p>My POJO mapping in web.xml is:</p>
  
  <pre><code>    &lt;init-param&gt;
          &lt;param-name&gt;com.sun.jersey.api.json.POJOMappingFeature&lt;/param-name&gt;
          &lt;param-value&gt;true&lt;/param-value&gt;
      &lt;/init-param&gt;
  </code></pre>