REST服务:返回异常的正确方法

最大G:

我将Jersey API用于我的REST服务。我的问题是:是否有更优雅的方式以JSON形式返回异常?与自己创建一个json对象并将其直接附加到响应上有关,这是否更好?

这是服务中方法之一的简化​​示例。如您所见,我之所以仅使用HashMap是因为该方法可能会引发异常,在这种情况下,我需要返回有关It的信息。

@Path("/admin")
public class AdminService {

    @Context
    HttpServletRequest request;

    @POST
    @Produces(MediaType.APPLICATION_JSON)
    public Map<Integer, String> createCompany(Company company){

        Map<Integer, String> map = new HashMap<>();
        try{
            AdminFacade adminFacade = (AdminFacade)Utility.getFacade(request);
            adminFacade.createCompany(company);
            map.put(1,"success");
        } catch (ExceptionREST e) {
            map.put(e.getErrorNumber(), e.getMessage());
        } finally {
            return map;
        }
    }
}
阿伦B·钱德拉塞卡兰(Arun B Chandrasekaran):

您可以像下面这样创建一个类来表示错误,

@JsonPropertyOrder({ "code", "field", "message" })
public class ErrorInfo {

    private String code;

    private String field;

    private String message;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getField() {
        return field;
    }

    public void setField(String field) {
        this.field = field;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

}

您可以创建一个扩展此类异常的类,

public class InvalidInputException extends RuntimeException {

    private static final long serialVersionUID = -5027121014723838738L;

    private List<ErrorInfo> errors;

    public List<ErrorInfo> getErrors() {
        return this.errors;
    }

    public InvalidInputException(List<ErrorInfo> errors) {
        super();
        this.errors = errors;
    }

    public InvalidInputException(String message, List<ErrorInfo> errors) {
        super(message);
        this.errors = errors;
    }

}

并具有一个异常映射器,您可以在其中将List转换为json并以http状态代码400(错误请求)返回给用户。

@Provider
public class InvalidInputExceptionMapper implements ExceptionMapper<InvalidInputException> {

    @Override
    @Produces(MediaType.APPLICATION_JSON)
    public Response toResponse(InvalidInputException e) {

        ResponseBuilder rb = Response.status(Status.BAD_REQUEST);

        rb.entity(e.getErrors());
        return rb.build();   
    }
}

Http Response将是,

HTTP/1.1 400 BAD REQUEST
{
"errors": [{
    "error": {
        "code": "100",
        "field": null,
        "message": "Name is required"
    },
    "error": {
        "code": "100",
        "field": null,
        "message": "Age is required"
    }
}]

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

REST服务无法正确返回元组

在Rest Web服务请求中返回文件的正确方法是什么?

如何正确处理来自服务的异常(spring boot rest)

在Phonegap中调用REST服务的正确方法

从Rest API返回集合的正确/最佳方法

REST服务的异常处理

使用 Mockito 测试可能引发异常的 POST 服务的正确方法?

从Scala中的异常返回的正确方法是什么?

如何模拟服务以抛出异常返回列表的方法?

记录异常的正确方法

REST服务的异常层次结构

即使uri正确,服务器也会在REST POST CALL上返回错误请求400

捕获服务结构ReceiveReminderAsync中未处理的所有异常的正确方法是什么

在生成 Excel 或 PDF 文件作为响应的 REST API 中处理异常的正确方法是什么?

从服务返回的数据未返回正确的数据

返回会员的正确方法

Spring Boot REST服务异常处理

休眠 REST Web 服务空指针异常

WCF REST完整服务中的异常处理

从 web api 方法返回异常

从REST Web服务向客户端发送文件的正确方法是什么?

Akka:这是使用Actors构建REST Web服务的正确方法吗?

执行服务器端验证的正确REST方法是什么?

从GRPC c ++服务器实现返回“未找到”响应的正确方法是什么?

在无服务器Lambda中返回HTTP错误代码的正确方法是什么

什么是正确的方法/可以链接两个AngularJs服务调用,然后对返回的数据执行功能?

Web服务未以正确格式返回数据

PHP休息服务未返回正确的响应

在ASP.NET Core 2中初始化记录器服务之前记录发生异常的正确方法