Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring REST的最佳错误模型是什么_Spring_Rest_Architecture_Restful Architecture - Fatal编程技术网

Spring REST的最佳错误模型是什么

Spring REST的最佳错误模型是什么,spring,rest,architecture,restful-architecture,Spring,Rest,Architecture,Restful Architecture,REST服务是否有标准的错误消息模型 我正在使用SpringREST后端和基于JS的主干前端构建REST服务。在所有的项目中,我发现有一些自制的错误消息机制,以及自制的客户端对这些错误的解释。对于这个特定的项目,这通常有一个有限的范围和用途 现在,在我当前的项目中,我想在POST请求中为无效的JSON字段引入字段错误。所以我需要扩展我的模型来支持这一点 从我的观点来看,这是另一个自行车,因为现场验证是我们当今的标准要求,所以我想知道,是否已经有一个错误模型,我可以在我的项目中重用 我非常熟悉Sp

REST服务是否有标准的错误消息模型

我正在使用SpringREST后端和基于JS的主干前端构建REST服务。在所有的项目中,我发现有一些自制的错误消息机制,以及自制的客户端对这些错误的解释。对于这个特定的项目,这通常有一个有限的范围和用途

现在,在我当前的项目中,我想在POST请求中为无效的JSON字段引入字段错误。所以我需要扩展我的模型来支持这一点

从我的观点来看,这是另一个自行车,因为现场验证是我们当今的标准要求,所以我想知道,是否已经有一个错误模型,我可以在我的项目中重用


我非常熟悉Spring中的HandlerExceptionResolver和Java中的@Valid注释。事实上,我正在使用它们分配。这更像是一个架构类的问题,将此类错误传达给独立的JS客户端的最佳模型是什么。

我通常做的是创建一个
验证错误
模型。在验证错误的情况下,模型将作为JSON返回给客户机,并带有HTTP状态代码,它包含客户机需要知道的关于错误的所有信息

模型的具体细节各不相同,但类似这样的情况将是一个良好的开端:

public class ValidationError {
    private int code;

    private String message;

    private Map<String, String> fields;

    /*...*/
}
这与Spring的
@ExceptionHandler
紧密结合。当您得到类似于
BindException
的东西时,您所要做的就是:

@ExceptionHandler(BindException.class)
@ResponseBody
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
private ValidationError handleBindException(BindException ex) {
    ValidationError validationError = new ValidationError();
    /* set code and message */
    for (FieldError error : ex.getFieldErrors()) {
        /* set fields' errors */
    }
    return validationError;
}

BindException
可以轻松获取字段错误。需要做更多的工作来挖掘异常中的错误,比如
JsonMappingException

我通常做的是创建
ValidationError
模型。在验证错误的情况下,模型将作为JSON返回给客户机,并带有HTTP状态代码,它包含客户机需要知道的关于错误的所有信息

模型的具体细节各不相同,但类似这样的情况将是一个良好的开端:

public class ValidationError {
    private int code;

    private String message;

    private Map<String, String> fields;

    /*...*/
}
这与Spring的
@ExceptionHandler
紧密结合。当您得到类似于
BindException
的东西时,您所要做的就是:

@ExceptionHandler(BindException.class)
@ResponseBody
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
private ValidationError handleBindException(BindException ex) {
    ValidationError validationError = new ValidationError();
    /* set code and message */
    for (FieldError error : ex.getFieldErrors()) {
        /* set fields' errors */
    }
    return validationError;
}

BindException
可以轻松获取字段错误。需要做更多的工作来挖掘异常中的错误,例如
JsonMappingException

可能最好的方法是在服务器和客户机上进行验证。我的建议仅限于客户,因为我对Spring不熟悉:主干网确实有一个
validate
方法用于主干网模型。鼓励您使用自己的验证逻辑覆盖此方法<代码>验证在您执行主干模型
保存
(即POST)时默认被调用,并且您还可以在您想要运行验证代码时触发
无效
事件(例如,在上键之后,在用户单击提交按钮之前)


如果您不喜欢编写大量定制前端验证,例如,有一些插件可用。

可能最好的方法是在服务器和客户端上进行验证。我的建议仅限于客户,因为我对Spring不熟悉:主干网确实有一个
validate
方法用于主干网模型。鼓励您使用自己的验证逻辑覆盖此方法<代码>验证在您执行主干模型
保存
(即POST)时默认被调用,并且您还可以在您想要运行验证代码时触发
无效
事件(例如,在上键之后,在用户单击提交按钮之前)


如果您不喜欢编写大量自定义前端验证,例如,有一些插件可用。

您必须使用HTTP状态代码和消息(也称为自我描述消息约束),并且在正文中,您可以以更具体的方式描述错误,例如使用多语言错误消息和自定义错误代码。请注意,错误消息将发送给最终用户,他们不关心确切的异常类型等。。。您可以通过调试模式向开发人员发送扩展的错误消息。我在询问错误主体的模型:)现在我看到了两种分类-字段中的错误、逻辑错误,基本上我在询问更大的范围是什么,除了字段错误和全局错误之外,还缺少什么。我认为缺少一个将客户端与服务实现分离的标准。我有一个。我不知道其他类型的错误,如果你问的话。对于字段错误,您显然必须使用一些CompositeException,对于一般错误,您必须使用一个简单的异常。之后,您必须将其转换为json、xml等。。。就这些。我认为这并不难。你必须使用HTTP状态代码和消息(也称为自我描述消息约束),在正文中你可以用更具体的方式描述错误,例如使用多语言错误消息和自定义错误代码。请注意,错误消息将发送给最终用户,他们不关心确切的异常类型等。。。您可以通过调试模式向开发人员发送扩展的错误消息。我在询问错误主体的模型:)现在我看到了两种分类-字段中的错误、逻辑错误,基本上我在询问更大的范围是什么,除了字段错误和全局错误之外,还缺少什么。我认为缺少一个将客户端与服务实现分离的标准。我有一个。我不知道其他类型的错误,如果你问的话。对于字段错误,您显然必须使用一些CompositeException,对于一般错误,您必须使用一个简单的异常。之后,您必须将其转换为json、xml等。。。就这些。我认为这并不难。谢谢,已经在使用主干。验证,这是一个很棒的库。我希望最终获得错误消息的透明性,无论是客户端验证还是服务器验证错误,这意味着