与Spring 4相同的印刷JSON

时间:2015-06-08 23:20:01

标签: java json spring-mvc

我有一个看起来像的控制器类:

@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);
}

&#39; GeneralUtil.convertToJson()&#39; method返回带有以下代码的漂亮打印字符串:

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不是很漂亮的。我错过了什么?

1 个答案:

答案 0 :(得分:0)

您忽略了@ResponseBody具有String返回类型的事实将导致StringHttpMessageConverter写入返回给HTTP响应正文的值。此HttpMessageConverter将生成content-type text/plain。我相信浏览器不会渲染新的行字符或修剪它们之间的空白。你的漂亮印刷会丢失。

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

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