Skip to content

Breaking Behavior in WebMvc for Json Message Converter #36027

@nospam06

Description

@nospam06

package org.example.endpoint.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.nio.charset.StandardCharsets;

@RestController
@RequestMapping(path = "/demo")
public class DemoController {

@GetMapping(value = "/byteArray")
public byte[] byteArray() {
    return "hello world".getBytes(StandardCharsets.UTF_8);
}

@GetMapping(value = "/string")
public String string() {
    return "hello world";
}

}

package org.example.endpoint.controller;

import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.http.converter.json.JacksonJsonHttpMessageConverter;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import tools.jackson.databind.json.JsonMapper;

import java.nio.charset.StandardCharsets;

import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@slf4j
@ExtendWith(MockitoExtension.class)
class DemoTest {
private static final String BASE_URL = "/demo";
private final JsonMapper objectMapper = new JsonMapper();

@Test
void byteArray() throws Exception {
    MockMvc mockMvc = MockMvcBuilders.standaloneSetup(new DemoController()).build();
    String expected = "hello world";
    MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get(BASE_URL + "/byteArray"))
            .andExpect(status().isOk()).andReturn();
    byte[] actual = mvcResult.getResponse().getContentAsByteArray();
    assertArrayEquals(expected.getBytes(StandardCharsets.UTF_8), actual);
}

@Test
void string() throws Exception {
    MockMvc mockMvc = MockMvcBuilders.standaloneSetup(new DemoController()).build();
    String expected = "hello world";
    MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get(BASE_URL + "/string"))
            .andExpect(status().isOk()).andReturn();
    String actual = mvcResult.getResponse().getContentAsString();
    assertEquals(expected, actual);
}

@Test
void byteArray2() throws Exception {
    MockMvc mockMvc = MockMvcBuilders.standaloneSetup(new DemoController())
            .setMessageConverters(new JacksonJsonHttpMessageConverter(objectMapper))
            .build();
    String expected = "hello world";
    MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get(BASE_URL + "/byteArray"))
            .andExpect(status().isOk()).andReturn();
    byte[] actual = mvcResult.getResponse().getContentAsByteArray();
    assertArrayEquals(expected.getBytes(StandardCharsets.UTF_8), actual);
}

@Test
void string2() throws Exception {
    MockMvc mockMvc = MockMvcBuilders.standaloneSetup(new DemoController())
            .setMessageConverters(new JacksonJsonHttpMessageConverter(objectMapper))
            .build();
    String expected = "hello world";
    MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get(BASE_URL + "/string"))
            .andExpect(status().isOk()).andReturn();
    String actual = mvcResult.getResponse().getContentAsString();
    assertEquals(expected, actual);
}

}

Metadata

Metadata

Assignees

No one assigned

    Labels

    status: invalidAn issue that we don't feel is valid

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions