Я использую Spring Boot в проекте Scala, и я уже использую Json4 для сериализации и десериализации JSON. До сих пор я писал такие конечные точки:
@RequestMapping(path = Array("/getSomething"), produces = Array(MediaType.APPLICATION_JSON_VALUE))
def getSomething: String = {
// do some things
val resultValue: ResultType = ??? // where ResultType is some case class that can be serialized with json4s
json4s.native.Serialization.write(resultValue)
}
Однако мне бы очень хотелось избежать этого последнего шага, сделав при этом более понятным, какой тип возврата конечной точки. Кроме того, я хотел бы иметь возможность извлекать возвращаемый тип для создания документов API. Вместо этого я хотел бы написать то же самое, например:
@RequestMapping(path = Array("/getSomething"), produces = Array(MediaType.APPLICATION_JSON_VALUE))
def getSomething: ResultType = {
// do some things
resultValue
}
Однако когда я это делаю, результат всегда будет просто {}
. Я предполагаю, что это связано с тем, что Spring используется Spring вместо Json4s, и у меня нет классов case, аннотированных для использования с Jackson. Все, что я хочу сделать, это добавить перехватчик, который вызывается на каждой конечной точке и преобразует результат в строку JSON. Написать перехватчик легко (это было бы просто json4s.native.Serialization.write
), но как я могу зарегистрировать его, чтобы Spring каждый раз автоматически использовал его?