Bu sorun beni deli etti: Bahar çok güçlü bir araç ve yine de, JSON gibi bir çıktı String'i yazmak gibi basit bir şey çirkin kesmek olmadan imkansız görünüyor.
En az müdahaleci ve en şeffaf bulduğum çözüm (Kotlin'de), bir denetleyici tavsiyesi kullanmak ve isteğin belirli bir uç nokta kümesine gidip gitmediğini kontrol etmek. ve döndürülen verilerin düz bir dize ("JSON serisini kaldırma!") veya başka bir şey ("JSON serisini kaldırma!") olup olmamasına bağlı olarak ön uçta uzmanlaşma yapmayın. Bunun olumlu yönü denetleyicinin aynı ve korsansız kalmasıdır.
supportsYöntemiyle işlenen tüm istekler emin olur StringHttpMessageConverterişlenir (kolları düz dizeleri döndüren tüm denetleyicileri çıkış olduğunu örn dönüştürücü) ve beforeBodyWriteyöntemle, biz kesmek ve JSON çıktı dönüştürmek istediğiniz durumlarda kontrol (ve başlıkları buna göre değiştirin).
@ControllerAdvice
class StringToJsonAdvice(val ob: ObjectMapper) : ResponseBodyAdvice<Any?> {
override fun supports(returnType: MethodParameter, converterType: Class<out HttpMessageConverter<*>>): Boolean =
converterType === StringHttpMessageConverter::class.java
override fun beforeBodyWrite(
body: Any?,
returnType: MethodParameter,
selectedContentType: MediaType,
selectedConverterType: Class<out HttpMessageConverter<*>>,
request: ServerHttpRequest,
response: ServerHttpResponse
): Any? {
return if (request.uri.path.contains("api")) {
response.getHeaders().contentType = MediaType.APPLICATION_JSON
ob.writeValueAsString(body)
} else body
}
}
Gelecekte HttpMessageConverterçıktı için kullanılması gerekenleri geçersiz kılabileceğimiz basit bir ek açıklama alacağımızı umuyorum .