title: SpringBoot 1.5.2:Required request body is missing when i make PUT RequestMethod
body: <p>When I want to test REST application, I try to write a test code segment like below:</p>
  
  <p>Controller Code:</p>
  
  <pre><code>import org.springframework.util.MultiValueMap;
  import org.springframework.web.bind.annotation.*;
  
  @RestController
  @RequestMapping(value="/Test")
  public class test {
  
      @RequestMapping(value="test1/{modelId}",method = RequestMethod.POST)
      public void test1(@PathVariable(value="modelId") String modelId,     @RequestBody MultiValueMap&lt;String, String&gt; values){
          String name = values.getFirst("name");
          String description = values.getFirst("description");
          System.out.println(modelId);
          System.out.println(name);
          System.out.println(description);
      }
  
      @RequestMapping(value="test2",consumes="application/x-www-form-urlencoded",method = RequestMethod.PUT)
      public void test2( @RequestBody MultiValueMap&lt;String, String&gt; values){
          String name = values.getFirst("name");
          String description = values.getFirst("description");
            System.out.println(name);
            System.out.println(description);
      }
  }
  </code></pre>
  
  <p>and below is Ajax call function:</p>
  
  <pre><code>function start() {
      var data1 = "test";
      var data2 = "test model";
  
      var jdata = {name:data1,description:data2};
      $.ajax({
          type: "PUT",
          async: false,
          url: "/Test/test2",
          dataType: "json",
          contentType: "application/x-www-form-urlencoded;charset=UTF-8",
          data: jdata,
          success: function (data) {
              alert("ok");
          }
      });
  }
  </code></pre>
  
  <p>I can get the right result when i call <code>http://localhost:8080/Test/test1/123</code>.
  but when i try to call <code>http://localhost:8080/Test/test2</code>,the console display warning:</p>
  
  <pre><code>WARN  o.s.w.s.m.support.DefaultHandlerExceptionResolver - Failed to read HTTP message:
  org.springframework.http.converter.HttpMessageNotReadableException:
  Required request body is missing:
  public void com.wisto.util.test.test2(org.springframework.util.MultiValueMap&lt;java.lang.String, java.lang.String&gt;)
  </code></pre>
  
  <p>and the browser get 400 error.</p>
  
  <p>I think I must miss something about config of SpringBoot. How can I solve it?</p>
  
  <p>For More clearer,I put a True Code From Activiti
      package org.activiti.rest.editor.model;</p>
  
  <pre><code>import java.io.ByteArrayInputStream;
  import java.io.ByteArrayOutputStream;
  import java.io.InputStream;
  
  import org.activiti.editor.constants.ModelDataJsonConstants;
  import org.activiti.engine.ActivitiException;
  import org.activiti.engine.RepositoryService;
  import org.activiti.engine.repository.Model;
  import org.apache.batik.transcoder.TranscoderInput;
  import org.apache.batik.transcoder.TranscoderOutput;
  import org.apache.batik.transcoder.image.PNGTranscoder;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.http.HttpStatus;
  import org.springframework.util.MultiValueMap;
  import org.springframework.web.bind.annotation.PathVariable;
  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.ResponseStatus;
  import org.springframework.web.bind.annotation.RestController;
  
  import com.fasterxml.jackson.databind.ObjectMapper;
  import com.fasterxml.jackson.databind.node.ObjectNode;
  
  /**
   * @author Tijs Rademakers
  */
  @RestController
  public class ModelSaveRestResource implements ModelDataJsonConstants {
  
    protected static final Logger LOGGER =    LoggerFactory.getLogger(ModelSaveRestResource.class);
  
    @Autowired
    private RepositoryService repositoryService;
  
    @Autowired
    private ObjectMapper objectMapper;
  
    @RequestMapping(value="/model/{modelId}/save", method = RequestMethod.PUT)
    @ResponseStatus(value = HttpStatus.OK)
    public void saveModel(@PathVariable String modelId, @RequestBody MultiValueMap&lt;String, String&gt; values) {
      try {
  
        Model model = repositoryService.getModel(modelId);
  
        ObjectNode modelJson = (ObjectNode)   objectMapper.readTree(model.getMetaInfo());
  
        modelJson.put(MODEL_NAME, values.getFirst("name"));
        modelJson.put(MODEL_DESCRIPTION, values.getFirst("description"));
        model.setMetaInfo(modelJson.toString());
        model.setName(values.getFirst("name"));
  
        repositoryService.saveModel(model);
  
        repositoryService.addModelEditorSource(model.getId(), values.getFirst("json_xml").getBytes("utf-8"));
  
        InputStream svgStream = new ByteArrayInputStream(values.getFirst("svg_xml").getBytes("utf-8"));
        TranscoderInput input = new TranscoderInput(svgStream);
  
        PNGTranscoder transcoder = new PNGTranscoder();
        // Setup output
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        TranscoderOutput output = new TranscoderOutput(outStream);
  
        // Do the transformation
        transcoder.transcode(input, output);
        final byte[] result = outStream.toByteArray();
        repositoryService.addModelEditorSourceExtra(model.getId(), result);
        outStream.close();
  
      } catch (Exception e) {
        LOGGER.error("Error saving model", e);
        throw new ActivitiException("Error saving model", e);
      }
    }
  }
  </code></pre>
  
  <p>The Code above works well with Spring.But with SpringBoot.So I am confused! </p>