Модульное тестирование пружинной загрузки MockMVC |Приложение / XML; кодировка = ISO-8859-1 - PullRequest
0 голосов
/ 17 декабря 2018

Я тестирую конечную точку, и тип содержимого ответа - "application / xml; charset = ISO-8859-1", когда я ожидаю, что это будет "application / xml".Можете ли вы увидеть, где я мог неправильно сконфигурировать аспект продукции?Я добавил его в @RequestMapping для функции и получил тот же неожиданный результат.

Тестируемая функция

@Controller
@RequestMapping(value = "/sitemaps",
    consumes = MediaType.ALL_VALUE,
    produces = MediaType.APPLICATION_XML_VALUE)
public class SitemapQueryControllerImpl implements SitemapQueryController {

    @RequestMapping(value = "/index.xml", method = RequestMethod.GET)
    public ResponseEntity<String> GetSitemapIndex() {
        return new ResponseEntity<>("<Hello>", HttpStatus.OK);
    }

}

Тест

@RunWith(SpringRunner.class)
@WebMvcTest(controllers = SitemapQueryControllerImpl.class, secure = false)
@ContextConfiguration(classes = {ApplicationTestContext.class})
public class SitemapQueryController_Spec {

    @Autowired
    private MockMvc mockMvc;


    @Before
    public void setup() { }


    @Test
    public void GetSitemapIndex_Successul() throws Exception {

        String expect = "<Hello>";
        mockMvc.perform(get("/sitemaps/index.xml")
                .contentType(MediaType.APPLICATION_XML_VALUE))
                    .andExpect(status().isOk())
                    .andExpect(content().contentType(MediaType.APPLICATION_XML_VALUE))
                    .andExpect(content().xml(expect));
}

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

Если вы просто используете application/xml в качестве своей конфигурации производства / принятия (как это делается с помощью используемого вами метода), она использует кодировку по умолчанию, которая по соображениям совместимости установлена ​​на кодировку ISO, которую вы получаете.Я сталкивался с той же проблемой сегодня и вчера, и решение состоит в том, чтобы явно передать application/xml;charset=utf-8 как contentType и принять заголовки, и проверить, что вы получаете application/xml;charset=utf-8 в качестве contentType возвращаемого содержимого.Самый простой способ сделать это - создать его с помощью конструктора new MediaType(MediaType.APPLICATION_XML.getType(), MediaType.APPLICATION_XML.getSubType(), StandardCharSets.UTF_8), чтобы создать новый MediaType для application/xml;charset=UTF-8, который затем можно будет использовать в тестовых запросах.

0 голосов
/ 17 декабря 2018

По умолчанию charset - UTF-8, MappingJackson2HttpMessageConverter - это тот, кто управляет charSet.Вы можете переопределить, реализовав bean-компонент и установив для charSet значение null.

@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
    MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
    jsonConverter.setObjectMapper(objectMapper);
    jsonConverter.setDefaultCharset(null);
    return jsonConverter;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...