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.
supports
Yöntemiyle işlenen tüm istekler emin olur StringHttpMessageConverter
işlenir (kolları düz dizeleri döndüren tüm denetleyicileri çıkış olduğunu örn dönüştürücü) ve beforeBodyWrite
yö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 .