spring-mvc - Spring MVC : Append new line to each response

标签 spring-mvc

考虑简单的@RestController,返回一个 Map:

@GetMapping("/foo")
public ResponseEntity<Map<String, Object>> foo() {
    Map<String, Any> map = HashMap<>();
    map.put(...);
    return ResponseEntity(map, HttpStatus.OK);
}

这很好用,它以 JSON 形式返回 Map。

但是,当您curl终端中的请求,光标停留在 JSON 的末尾,不幸的是,使用它很不舒服。我们之前的实现总是返回 \n在每个 JSON 的末尾。有没有办法让 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())
}

不幸的是,它从未被调用过,我猜格式化程序是用于其他用途的。

最佳答案

最后通过HttpMessageConverter完成:

class GsonHttpMessageConverter : AbstractHttpMessageConverter<Map<String, Any?>>(
        MediaType("application", "json", Charset.forName("UTF-8"))) {

    override fun readInternal(clazz: Class<out Map<String, Any?>>, inputMessage: HttpInputMessage)
            = Gson().fromJson(IOUtils.toString(inputMessage.body, "UTF-8"), clazz)

    override fun supports(clazz: Class<*>) = Map::class.java.isAssignableFrom(clazz)

    override fun writeInternal(payload: Map<String, Any?>, outputMessage: HttpOutputMessage) {   
        outputMessage.body.write(Gson().toJson(payload) + "\n".toByteArray())
    }
}

关于spring-mvc - Spring MVC : Append new line to each response,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51674496/

相关文章:

java - 使用默认配置的 Spring Boot 应用程序的文件位置

java - 在 Spring MVC 中,我有一个 @ModelAttribute 并且它抛出异常。如果我收到此异常,我想显示一个页面。如何?

java - spring + jsp + hibernate 中的 NotReadablePropertyException

java - Spring数据ldap配置

java - 用于公开 Neo4j 节点的 REST 接口(interface)实现

java - 我的自定义存储库实现中的 CrudRepository

hibernate - 如何处理 Spring Data JPA 中 ID 数组的批量删除?

java - 绕过 Grails View 解析器?

java - 无法在 Spring Boot 中加载 View

java - 我正在将 SpringMVC 用于 Web 应用程序,并将 sessionFactory 用于 Hibernate。以下是我正在使用的 pom.xml