我正在添加我对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对象(或至少一个字符串)?
答案 0 :(得分:2)
导入Results
并调用Results.internalServerError(result)
等等应该摆脱编译错误。
import play.mvc.Results;
...
return F.Promise.<SimpleResult>pure(Results.internalServerError(result));