title: How to send Date in REST API in POST method
body: <p>I am trying to build RESTful web service  with Spring support. I am getting following exception when I am trying to send POST request.</p>
  
  <p>Input:</p>
  
  <pre><code>POST    http://localhost:8080/InventoryDemo/item
  </code></pre>
  
  <p>In JSON Payload:</p>
  
  <pre><code>{"materialId":"ID02","materialName":"Material_2","materialCategory":"LIQUID","currency":"RUPEES","unitCostInCurrency":2200.0,"quantityLevel":1000,"quantityAtDate":"2016-04-11","warehouseName":"WareHouse_2"}
  </code></pre>
  
  <p>Exception:</p>
  
  <pre><code>WARNING: Handler execution resulted in exception: Could not read document: Can not instantiate value of type [simple type, class java.time.LocalDate] from String value ('2016-04-11'); no single-String constructor/factory method
   at [Source: java.io.PushbackInputStream@378ace07; line: 1, column: 146] (through reference chain: com.psl.inventory.model.InventorySystemModel["quantityAtDate"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [simple type, class java.time.LocalDate] from String value ('2016-04-11'); no single-String constructor/factory method
   at [Source: java.io.PushbackInputStream@378ace07; line: 1, column: 146] (through reference chain: com.psl.inventory.model.InventorySystemModel["quantityAtDate"])
  </code></pre>
  
  <p>This is my POST method from @RestController:</p>
  
  <pre><code>@RequestMapping(value = "/item", method = RequestMethod.POST)
      public ResponseEntity&lt;Void&gt; createInventorySystemModel(@RequestBody InventorySystemModel inventorySystemModel,  UriComponentsBuilder ucBuilder) {
          System.out.println("Creating InventorySystemModel " + inventorySystemModel.getMaterialName());
  
          if (inventorySystemService.isInventorySystemModelExist(inventorySystemModel)) {
              System.out.println("A InventorySystemModel with name " + inventorySystemModel.getMaterialName() + " already exist");
              return new ResponseEntity&lt;Void&gt;(HttpStatus.CONFLICT);
          }
  
          inventorySystemService.saveInventoryItem(inventorySystemModel);
  
          HttpHeaders headers = new HttpHeaders();
          headers.setLocation(ucBuilder.path("/user/{materialId}").buildAndExpand(inventorySystemModel.getMaterialId()).toUri());
          return new ResponseEntity&lt;Void&gt;(headers, HttpStatus.CREATED);
      }
  </code></pre>
  
  <p>and this is my POJO class:</p>
  
  <pre><code>public class InventorySystemModel {
  
      private String materialId;
      private String materialName;
      private String materialCategory;
      private String currency;
      private double unitCostInCurrency;
      private int quantityLevel;
      private LocalDate quantityAtDate;
      private String warehouseName;
  
      public InventorySystemModel(){
  
      }
      public InventorySystemModel(String materialId, String materialName,
              String materialCategory, String currency,
              double unitCostInCurrency, int quantityLevel, LocalDate quantityAtDate,
              String warehouseName) {
          super();
          this.materialId = materialId;
          this.materialName = materialName;
          this.materialCategory = materialCategory;
          this.currency = currency;
          this.unitCostInCurrency = unitCostInCurrency;
          this.quantityLevel = quantityLevel;
          this.quantityAtDate = quantityAtDate;
          this.warehouseName = warehouseName;
      }
  
      public String getMaterialId() {
          return materialId;
      }
      public void setMaterialId(String materialId) {
          this.materialId = materialId;
      }
      public String getMaterialName() {
          return materialName;
      }
      public void setMaterialName(String materialName) {
          this.materialName = materialName;
      }
      public String getMaterialCategory() {
          return materialCategory;
      }
      public void setMaterialCategory(String materialCategory) {
          this.materialCategory = materialCategory;
      }
      public String getCurrency() {
          return currency;
      }
      public void setCurrency(String currency) {
          this.currency = currency;
      }
      public double getUnitCostInCurrency() {
          return unitCostInCurrency;
      }
      public void setUnitCostInCurrency(double unitCostInCurrency) {
          this.unitCostInCurrency = unitCostInCurrency;
      }
      public int getQuantityLevel() {
          return quantityLevel;
      }
      public void setQuantityLevel(int quantityLevel) {
          this.quantityLevel = quantityLevel;
      }
      public LocalDate getQuantityAtDate() {
          return quantityAtDate;
      }
      public void setQuantityAtDate(LocalDate quantityAtDate) {
          this.quantityAtDate = quantityAtDate;
      }
      public String getWarehouseName() {
          return warehouseName;
      }
      public void setWarehouseName(String warehouseName) {
          this.warehouseName = warehouseName;
      }
      @Override
      public int hashCode() {
          final int prime = 31;
          int result = 1;
          result = prime * result
                  + ((currency == null) ? 0 : currency.hashCode());
          result = prime
                  * result
                  + ((materialCategory == null) ? 0 : materialCategory.hashCode());
          result = prime * result
                  + ((materialId == null) ? 0 : materialId.hashCode());
          result = prime * result
                  + ((materialName == null) ? 0 : materialName.hashCode());
          result = prime * result
                  + ((quantityAtDate == null) ? 0 : quantityAtDate.hashCode());
          result = prime * result + quantityLevel;
          long temp;
          temp = Double.doubleToLongBits(unitCostInCurrency);
          result = prime * result + (int) (temp ^ (temp &gt;&gt;&gt; 32));
          result = prime * result
                  + ((warehouseName == null) ? 0 : warehouseName.hashCode());
          return result;
      }
      @Override
      public boolean equals(Object obj) {
          if (this == obj)
              return true;
          if (obj == null)
              return false;
          if (getClass() != obj.getClass())
              return false;
          InventorySystemModel other = (InventorySystemModel) obj;
          if (currency == null) {
              if (other.currency != null)
                  return false;
          } else if (!currency.equals(other.currency))
              return false;
          if (materialCategory == null) {
              if (other.materialCategory != null)
                  return false;
          } else if (!materialCategory.equals(other.materialCategory))
              return false;
          if (materialId == null) {
              if (other.materialId != null)
                  return false;
          } else if (!materialId.equals(other.materialId))
              return false;
          if (materialName == null) {
              if (other.materialName != null)
                  return false;
          } else if (!materialName.equals(other.materialName))
              return false;
          if (quantityAtDate == null) {
              if (other.quantityAtDate != null)
                  return false;
          } else if (!quantityAtDate.equals(other.quantityAtDate))
              return false;
          if (quantityLevel != other.quantityLevel)
              return false;
          if (Double.doubleToLongBits(unitCostInCurrency) != Double
                  .doubleToLongBits(other.unitCostInCurrency))
              return false;
          if (warehouseName == null) {
              if (other.warehouseName != null)
                  return false;
          } else if (!warehouseName.equals(other.warehouseName))
              return false;
          return true;
      }
      @Override
      public String toString() {
          return "InventorySystemModel [materialId=" + materialId
                  + ", materialName=" + materialName + ", materialCategory="
                  + materialCategory + ", currency=" + currency
                  + ", unitCostInCurrency=" + unitCostInCurrency
                  + ", quantityLevel=" + quantityLevel + ", quantityAtDate="
                  + quantityAtDate + ", warehouseName=" + warehouseName + "]";
      }
  }
  </code></pre>
  
  <p>FYI: I did checked <a href="https://blog.oio.de/2015/06/13/add-support-for-java-8-date-time-api-to-jackson-serialized-rest-web-services/" rel="noreferrer">this</a> post but not getting clue like where exactly I need to do modification.</p>
  
  <p>I am using Java 8 and Spring 4.2</p>
  
  <p>Can some one please explain in detail like what exactly I need to do here.
  <strong>Also I want same date format when I will hit GET request.</strong></p>
  
  <p>Thanks.</p>