使用JsonView将POJO转换为JsonNode

Vic*_* M. 7 java jackson playframework playframework-2.0

我正在编写一个典型的Play Framework应用程序,我希望使用Jackson从Controller的方法返回JsonNode.

这就是我现在正在做的事情:

public static Result foo() {
   MyPojoType myPojo = new myPojo();
   String tmp = new ObjectMapper().writerWithView(JSONViews.Public.class).writeValueAsString(myPojo);
   JsonNode jsonNode = Json.parse(tmp);
   return ok(jsonNode);
}
Run Code Online (Sandbox Code Playgroud)

是否可以避免"String tmp"复制并使用视图直接从MyPojoType转换为JsonNode?

也许我可以使用ObjectMapper.valueToTree,但我不知道如何为它指定一个JSonView.

Vic*_* M. 1

经过更多调查,这就是我最终所做的以避免多余的工作:

public Result toResult() {

    Content ret = null;

    try {
        final String jsonpayload = new ObjectMapper().writerWithView(JsonViews.Public.class).writeValueAsString(payload);

         ret = new Content() {
            @Override public String body() { return jsonpayload; }
            @Override public String contentType() { return "application/json"; }
        };
    } catch (JsonProcessingException exc) {
        Logger.error("toResult: ", exc);
    }

    if (ret == null)
        return Results.badRequest();

    return Results.ok(ret);
}
Run Code Online (Sandbox Code Playgroud)

总之:ok、badRequest 等方法接受 play.mvc.Content 类。然后,只需使用它来包装序列化的 json 对象即可。