全球和Json的回应?

时间:2014-01-29 10:36:21

标签: playframework-2.2

我正在添加我对Play!Framework应用程序返回的404/500错误的具体响应,在某些情况下,我希望它能返回一个类似Json的答案(作为文本,没关系)。

我试过了:

import play.GlobalSettings;
import play.libs.F.Promise;
import play.libs.Json;
import play.mvc.Http.RequestHeader;
import play.mvc.SimpleResult;

import com.fasterxml.jackson.databind.node.ObjectNode;
public class Global extends GlobalSettings {
    @Override
    public Promise<SimpleResult> onError(RequestHeader request, Throwable t) {
        if (play.Play.isDev()) {
            return super.onError(request, t);
        }

        if ("/api/".equals(request.path().substring(0, 5))) {
            ObjectNode result = Json.newObject();
            result.put("error", "Internal server error.");
            result.put("code", "500");

            return Promise.<SimpleResult>pure(internalServerError(result));
        }
        else {
            return Promise.<SimpleResult>pure(internalServerError(
                views.html.internalServerError.render()
            ));
        }
    }

    @Override
    public Promise<SimpleResult> onHandlerNotFound(RequestHeader request) {
        if (play.Play.isDev()) {
            return super.onHandlerNotFound(request);
        }

        if ("/api/".equals(request.path().substring(0, 5))) {
            ObjectNode result = Json.newObject();
            result.put("error", "Url not found.");
            result.put("code", "404");

            return Promise.<SimpleResult>pure(internalServerError(result));
        }
        else {
            return Promise.<SimpleResult>pure(notFound(
                views.html.notFound.render()
            ));
        }
    }
}

但是我找到error: cannot find symbol位于internalServerError的行。

我相信internalServerError期望一个渲染模板,但我怎样才能指定一个Json对象(或至少一个字符串)?

1 个答案:

答案 0 :(得分:2)

导入Results并调用Results.internalServerError(result)等等应该摆脱编译错误。

import play.mvc.Results;

...
return F.Promise.<SimpleResult>pure(Results.internalServerError(result));