Sau khi tôi nâng cấp lên 2.2.0.RELEASE
phiên bản Spring Boot mới phát hành, một số thử nghiệm của tôi đã thất bại. Dường như MediaType.APPLICATION_JSON_UTF8
đã bị phản đối và không còn được trả về là loại nội dung mặc định từ các phương thức điều khiển không chỉ định rõ ràng loại nội dung.
Kiểm tra mã như
String content = mockMvc.perform(get("/some-api")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
.andReturn()
.getResponse()
.getContentAsString();
đột nhiên không hoạt động nữa vì loại nội dung không khớp như hình bên dưới
java.lang.AssertionError: Content type
Expected :application/json;charset=UTF-8
Actual :application/json
Thay đổi mã để .andExpect(content().contentType(MediaType.APPLICATION_JSON))
giải quyết vấn đề ngay bây giờ.
Nhưng bây giờ khi so sánh content
với đối tượng được tuần tự hóa dự kiến vẫn còn một sự không phù hợp nếu có bất kỳ ký tự đặc biệt nào trong đối tượng. Dường như .getContentAsString()
phương thức này không sử dụng mã hóa ký tự UTF-8 theo mặc định (bất kỳ nữa).
java.lang.AssertionError: Response content expected:<[{"description":"Er hörte leise Schritte hinter sich."}]> but was:<[{"description":"Er hörte leise Schritte hinter sich."}]>
Expected :[{"description":"Er hörte leise Schritte hinter sich."}]
Actual :[{"description":"Er hörte leise Schritte hinter sich."}]
Làm cách nào tôi có thể nhận được content
mã hóa UTF-8?