title: spring mvc 3 content-type "application/json" works from client but not from unit test
body: <p>I have a Rest Controller method using Spring 3.1 that looks like this:</p>
  
  <pre><code>@RequestMapping(value="/user", method=RequestMethod.POST, consumes={MediaType.APPLICATION_JSON_VALUE})
  public ResponseEntity&lt;String&gt; addUser(@RequestBody @Valid User user){   
      System.out.println("called / user method");
        try{
          user = userService.addUser(user); 
          return responseBuilder.addApiResourceSucceeded(user,null);
        }catch(Exception e){
          return responseBuilder.apiActionFailed("user already exists", HttpStatus.CONFLICT);  
        }
  }
  </code></pre>
  
  <p>I have test which looks like this:</p>
  
  <pre><code>@Before
  public void setUp() {
      adapter = new AnnotationMethodHandlerAdapter();
      request = new MockHttpServletRequest();
      response = new MockHttpServletResponse();
      mapper = new ObjectMapper();
  }
  @Test
  public void testAddUser() throws Exception {
      request.setMethod("POST");
      request.setContentType(MediaType.APPLICATION_JSON_VALUE);
      request.setRequestURI("/user");
  
      ObjectNode userJson = mapper.createObjectNode();
      userJson.put("userId", "jonnybz");
      userJson.put("email", "test@gmail.com");
      userJson.put("password", "password");
      userJson.put("longitude",-10.127205999);
      userJson.put("latitude", 57.252269);
      ArrayNode arrNode = mapper.createArrayNode();
      arrNode.add(-10.1272059999);
      arrNode.add(57.2522);
      userJson.put("lonLat",arrNode);
      request.setContent(mapper.writeValueAsBytes(userJson));
      adapter.handle(request, response, userController); 
  
      String content = response.getContentAsString();
      assertEquals(200, response.getStatus());
      User user = dao.listAll().get(0);
      objectId = user.getId();
      assertNotNull(objectId);
  }
  </code></pre>
  
  <p>When I execute a call against this endpoint from my client app (developed with angular) it works great, but when I run my test I get an " Content type 'application/json' which is coming from a HttpMediaTypeNotSupportedException" error that I cannot track down. The request never seems to hit my method. Am I missing something simple here?</p>
  
  <p><strong>Solved</strong> this problem by switching to the <a href="https://github.com/SpringSource/spring-test-mvc" rel="noreferrer">spring-mvc-test</a> framework and building my test like this:</p>
  
  <pre><code>@Test
  public void testAddUser() throws Exception {
  
      ObjectNode userJson = mapper.createObjectNode();
      userJson.put("userId", "jonnbz");
      userJson.put("email", "test@gmail.com");
      userJson.put("password", "password");
      userJson.put("longitude",-10.667205999);
      userJson.put("latitude", 74.252269);
      ArrayNode arrNode = mapper.createArrayNode();
      arrNode.add(-10.667205999);
      arrNode.add(74.252269);
      userJson.put("lonLat",arrNode);
      MvcResult res = MockMvcBuilders.xmlConfigSetup("classpath:test-context.xml").build()
             .perform(MockMvcRequestBuilders.post("/user")
             .accept(MediaType.APPLICATION_JSON)
             .contentType(MediaType.APPLICATION_JSON)
             .body(mapper.writeValueAsBytes(userJson)))
             .andExpect(status().isOk())
             .andExpect(content().type(MediaType.APPLICATION_JSON))
             .andReturn();
              System.out.println(res.getResponse().getContentAsString());
  
  }
  </code></pre>