【问题标题】:Pretty print JSON with Spring 4Spring 4 的漂亮打印 JSON
【发布时间】:2015-06-08 23:20:00
【问题描述】:

我有一个控制器类,如下所示:

@RequestMapping(value="/enter/two-factor/blacklist", method = RequestMethod.GET, produces = "application/json")
public @ResponseBody String getBlacklist(int days) {
    List<Honey> honey = honeyService.fetchAllPings(days);
    List<Locate> locations = honeyService.parseDistinctLocations(honey);
    return GeneralUtil.convertToJson(locations);
}

'GeneralUtil.convertToJson()' 方法返回一个带有以下代码的漂亮打印字符串:

public static String convertToJson(List<Locate> locations){
    Gson gson = new GsonBuilder().setPrettyPrinting().create();
    String json = "";
    try {
        json = gson.toJson(new Blacklist(locations));
    } catch (Exception e){
        e.printStackTrace();
    }
    JsonParser jp = new JsonParser();
    JsonElement je = jp.parse(json);
    String prettyJsonString = gson.toJson(je);
    System.out.println(prettyJsonString);
    return prettyJsonString;
}

但是,当页面呈现时,JSON 的打印效果并不好。我错过了什么?

【问题讨论】:

    标签: java json spring-mvc


    【解决方案1】:

    您忽略了一个事实,即具有 String 返回类型的 @ResponseBody 将导致 StringHttpMessageConverter 将返回的值写入 HTTP 响应正文。这个HttpMessageConverter 将产生content-typetext/plain。我相信浏览器不会呈现换行符或修剪它们之间的空白。你漂亮的印刷品丢失了。

    您应该做的是注册您自己的GsonHttpMessageConverterMappingJackson2HttpMessageConverter,这是为了进行漂亮的打印。然后将处理程序方法的返回类型更改为List&lt;Locate&gt; 并直接返回locations。这些HttpMessageConverter 实现产生application/json,浏览器应该按字面意思呈现。

    GsonObjectMapper 实例是线程安全的。绝对没有理由为每个请求重新实例化这些类。)

    【讨论】:

      猜你喜欢
      • 2016-07-07
      • 2014-05-19
      • 2021-01-31
      • 2014-05-12
      • 2017-11-03
      • 2011-05-05
      • 2017-05-01
      • 2014-03-18
      相关资源
      最近更新 更多