我的端点生成如下:
public Book insertBook(Book book) {
PersistenceManager mgr = getPersistenceManager();
try {
if (containsShout(book)) {
throw new EntityExistsException("Object already exists");
}
mgr.makePersistent(book);
} finally {
mgr.close();
}
return book;
}
我想知道如何将错误返回给客户端。 例如。这本书包含一些必填字段,ISNM检查等。
所以我会假设抛出一个异常,但是它如何映射到返回的json响应。 json repsonse应包含所有字段错误以突出显示客户端中的这些字段。
答案 0 :(得分:5)
通常,异常会映射到响应中的500 http状态代码。除以下例外,您可以获得不同的代码:
com.google.api.server.spi.response.BadRequestException
- > 400
com.google.api.server.spi.response.UnauthorizedException
- > 401
com.google.api.server.spi.response.ForbiddenException
- > 403
com.google.api.server.spi.response.NotFoundException
- > 404
如果您在Android中使用端点,则错误代码将在抛出的IOException中,您可以在catch中做出相应的反应。
答案 1 :(得分:3)
我尝试过这样的事情,似乎对我有用。
class Response<T> {
Status status;
String userFriendlyMessage;
T object; //your bean or entity object
RestResponse toRestResponse() {
RestResponse r = new RestResponse();
r.status = status;
r.userFriendlyMessage = userFriendlyMessage;
r.object = object;
}
}
您无法从端点返回通用对象。因此,创建一个等效的RestResponse类,可以从Response创建。
class RestResponse {
Status status;
String userFriendlyMessage;
Object object;
}
状态可以是这样的。
public enum Status {
SUCCESS, RESOURCE_NOT_FOUND, RESOURCE_ALREADY_EXISTS; //etc
}
所有端点方法都将返回RestResponse,而RestResponse又将从Response构造(T可以是您的bean或实体对象)。
当你反序列化你的json响应(RestResponse)时,你可以直接将它反序列化为Response。
希望这有帮助。
此致 沙迪亚
答案 2 :(得分:0)
我这样做是通过一个抽象类Entity。
它有一个ResponseCode,它是一个枚举和一个String ErrorMessage。
所以“Book”可以从Entity继承。你的回答可能如下:
public Book insertBook(Book book) {
PersistenceManager mgr = getPersistenceManager();
try {
if (containsShout(book)) {
book.setResponseCode(ResponseCode.ERROR);
book.setError("Object already exists");
} else {
mgr.makePersistent(book);
}
} finally {
mgr.close();
}
return book;
}