考虑一个简单的@RestController,返回一个Map:
@GetMapping("/foo")
public ResponseEntity<Map<String, Object>> foo() {
Map<String, Any> map = HashMap<>();
map.put(...);
return ResponseEntity(map, HttpStatus.OK);
}
这个很好用,可以将Map转换成JSON。
但是,在终端中使用curl
请求时,光标会停留在JSON的末尾,这样操作起来不太方便。我们之前的实现方法总是在每个JSON的末尾返回\n
。有没有办法让Spring也附加上\n
呢?
编辑
我试图实现格式化程序:
private inner class MapFormatter : Formatter<Map<*, *>> {
override fun parse(payload: String, locale: Locale): Map<*, *> {
return Gson().fromJson(payload, Map::class)
}
override fun print(payload: Map<*, *>, locale: Locale): String {
return Gson().toJson(payload) + "\n"
}
}
并添加了:
override fun addFormatters(registry: FormatterRegistry) {
registry.addFormatter(MapFormatter())
}
很遗憾,它从未被调用过,我猜格式化程序是为其他用途而设计的。
@Configuration
或Filter
,可以处理这个问题。你的最后一部分正是我所需要的,但我仍然不确定如何实现它。 - Vojtěch