title: Exception when Using TestRestTemplate
body: <p>I have ordinary SpringBoot application with custom auth filter which works normally.</p>
  
  <p>But I have problem when using TestRestTemplate in integration test.</p>
  
  <p>I would like to check here if user with wrong creditials cant login.
  But Instead of ResponseEntity with 401 status I got Exception:</p>
  
  <pre><code>org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: cannot retry due to server authentication, in streaming mode; nested exception is java.net.HttpRetryException: cannot retry due to server authentication, in streaming mode
      at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.readJavaType(MappingJackson2HttpMessageConverter.java:228)
      at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.read(MappingJackson2HttpMessageConverter.java:220)
      at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:95)
      at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:795)
      at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:779)
      at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:559)
      at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:512)
      at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:454)
      at cz.angular.security.basic.rest.AuthorizeControllerTest.userWithWrongCreditials(AuthorizeControllerTest.java:64)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
      at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
      at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
      at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
      at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
      at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83)
      at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
      at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:233)
      at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:87)
      at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
      at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
      at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
      at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
      at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
      at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
      at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
      at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
      at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:176)
      at org.junit.runners.Suite.runChild(Suite.java:127)
      at org.junit.runners.Suite.runChild(Suite.java:26)
      at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
      at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
      at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
      at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
      at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
      at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
      at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
      at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:74)
      at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:211)
      at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:67)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
  Caused by: java.net.HttpRetryException: cannot retry due to server authentication, in streaming mode
      at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1280)
      at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:379)
      at org.springframework.http.client.SimpleClientHttpResponse.getRawStatusCode(SimpleClientHttpResponse.java:48)
      at org.springframework.http.client.AbstractClientHttpResponse.getStatusCode(AbstractClientHttpResponse.java:33)
      at org.springframework.web.client.DefaultResponseErrorHandler.getHttpStatusCode(DefaultResponseErrorHandler.java:56)
      at org.springframework.web.client.DefaultResponseErrorHandler.hasError(DefaultResponseErrorHandler.java:50)
      at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:552)
      ... 42 more
  </code></pre>
  
  <p>Internally spring throws 
  org.springframework.security.authentication.BadCredentialsException but in real application usage its translated to json response.</p>
  
  <p>When using curl I got normal response.</p>
  
  <pre><code>curl -H "Content-Type: application/json" -d '{"name":"user","password":"password-wrong"}' http://localhost:8080/login
  {"timestamp":"2014-12-07T10:07:27.166+0000","status":401,"error":"Unauthorized","exception":"org.springframework.security.authentication.BadCredentialsException","message":"Bad credentials","path":"/login"}
  </code></pre>
  
  <p>Test code is here:</p>
  
  <pre><code>@RunWith(SpringJUnit4ClassRunner.class)
  @SpringApplicationConfiguration(classes = Application.class)
  @WebAppConfiguration
  @IntegrationTest("server.port:9999")
  public class AuthorizeControllerTest {
  
    public static final String LOCALHOST = "http://localhost:9999";
  
  ...
  
    @Test
    public void userWithWrongCreditials() throws Exception {
      RestTemplate rest = new TestRestTemplate();
  
      Credentials credentials = new Credentials();
      credentials.setName("user");
      credentials.setPassword("password-wrong");
  
      ResponseEntity&lt;Map&gt; response =
        rest.exchange(
          LOCALHOST + "/login",
          HttpMethod.POST,
          new HttpEntity&lt;Credentials&gt;(credentials),
          Map.class);
  
      assertEquals(HttpStatus.UNAUTHORIZED, response.getStatusCode());
    }
  }
  </code></pre>
  
  <p>Whole project can be seen in repository</p>
  
  <p><a href="https://bitbucket.org/winsik/security-token-stackoverflow/" rel="noreferrer">https://bitbucket.org/winsik/security-token-stackoverflow/</a></p>
  
  <p>Where you can see both passing tests and the failing one in AuthorizeControllerTest.</p>
  
  <p>I have try a lot of things like setting Content type and so on but with no luck.
  I would appreciate any ideas.</p>