Ist @RequestMapping abhängig von der Reihenfolge der Werte?

Diese Frage basiert aufdiese Frag.

Mit Kommentaren hatte ich drei verschiedene Tests geschrieben, um richtig eingestellte Inhaltstypen zu validieren.

@Test
public void testGetImageJpg_ShouldSucceed() throws Exception {
    File testImage = new File(TestConstants.TEST_IMAGE_JPG);
    byte[] expectedBytes = IOUtils.toByteArray(new FileInputStream(testImage));
    when(service.getImage(anyString(), anyString())).thenReturn(testImage);
    mockMvc.perform(get("/getImage/id/bla.jpg").sessionAttrs(session))
            .andExpect(status().isOk()).andExpect(content().contentType(MediaType.IMAGE_JPEG))
            .andExpect(content().bytes(expectedBytes));

}

@Test
public void testGetImagePng_ShouldSucceed() throws Exception {
    File testImage = new File(TestConstants.TEST_IMAGE_PNG);
    byte[] expectedBytes = IOUtils.toByteArray(new FileInputStream(testImage));
    when(service.getImage(anyString(), anyString())).thenReturn(testImage);
    mockMvc.perform(get("/getImage/id/bla.png").sessionAttrs(session))
            .andExpect(status().isOk()).andExpect(content().contentType(MediaType.IMAGE_PNG))
            .andExpect(content().bytes(expectedBytes));

}

@Test
public void testGetImageGif_ShouldSucceed() throws Exception {
    File testImage = new File(TestConstants.TEST_IMAGE_GIF);
    byte[] expectedBytes = IOUtils.toByteArray(new FileInputStream(testImage));
    when(service.getImage(anyString(), anyString())).thenReturn(testImage);
    mockMvc.perform(get("/getImage/id/bla.gif").sessionAttrs(session))
            .andExpect(status().isOk()).andExpect(content().contentType(MediaType.IMAGE_GIF))
            .andExpect(content().bytes(expectedBytes));

}

Dies ist mein Controller, bei dem alle Tests erfolgreich sind:

@RequestMapping(value="/getImage/{id}/{path}", produces = {"image/png","image/jpeg","image/gif"})
@ResponseBody
byte[] getImage(@PathVariable("id") String id,
        @PathVariable("path") String path) throws ImageNotFoundException {      
    File imageFile = service.getImage(id, path);
    InputStream in;        
    try {
        in = new FileInputStream(imageFile);
        return IOUtils.toByteArray(in);
    } catch (IOException e) {           
        throw new ImageNotFoundException();
    }
}

Aber wenn ich die Reihenfolge ändere, wird der Wert zu

produces = {"image/jpeg","image/png","image/gif"}

Der Test für PNG schlägt fehl:

java.lang.AssertionError: Content type expected:<image/png> but was:<image/jpeg>

Im wenig verwirrt, dass das Ändern der Reihenfolge der produzierten Werte zu unterschiedlichen Ergebnissen führt.

Hat jemand dies bemerkt, ist es ein Fehler oder habe ich etwas verpasst?

Antworten auf die Frage(0)

Ihre Antwort auf die Frage