当前位置: 首页 > 知识库问答 >
问题:

使用Spring MVC向用户显示服务级别验证错误的良好实践

逑和蔼
2023-03-14

在使用Spring MVC验证器执行了“浅层”用户输入验证后,是否有一些好的做法可以使用Spring MVC来显示服务层验证错误?例如,使用以下代码:

@Autowired
private UserService userService;

@RequestMapping(value = "user/new", method = RequestMethod.POST)
public String createNewUser(@ModelAttribute("userForm") UserForm userForm, BindingResult result, Model model){
    UserFormValidator validator = new UserFormValidator(); //extending org.springframework.validation.Validator
    validator.validate(userForm, result);

    if(result.hasErrors()){
        model.addAttribute("userForm", userForm);
        return "user/new";
    }

    // here, for example, the user already might exist
    userService.createUser(userForm.getName(), userForm.getPassword());

    return "redirect:user/home";
} 

虽然将此代码作为示例看起来微不足道,但当服务层的验证是一项复杂的任务时,对我来说,这似乎是一个微妙的故事。尽管这是一个荒谬的场景,UserService可能会创建一个用户列表,如果其中一个已经存在,那么必须以某种方式通知视图层其中哪些是无效的(例如已经存在)。

尽可能容易。有什么建议吗?

共有1个答案

齐昆
2023-03-14

选择通常是异常而不是错误代码(或响应代码),但最佳实践(至少是Bloch的做法)是只在特殊情况下使用异常,这在这种情况下使异常失效,因为用户选择现有用户名并非闻所未闻。

服务调用中的问题是,假设createuser是一个命令命令,没有返回值。你应该把它看作是“尝试创建一个用户,然后给我一个结果”。结果可能是

  • 整数代码(可怕的想法)
  • 共享结果枚举中的常量(由于可维护性,这仍然是个坏主意)
  • 来自更具体的常数,如UserOperationResult枚举(更好的主意,因为在创建新用户和尝试修改用户时,您可能希望返回User_alReady_Exists)
  • 完全自定义此调用的UserCreationResult对象(这不是一个好主意,因为您将得到大量此类调用)
  • 一个result UserOperationResult 包装器对象,它将响应代码常量(分别为ResultCodeUserOperationResultCode)和返回值T或通配符(如果没有返回值)结合在一起...只是要注意那些不需要包装器的切入点之类的东西)

未检查异常的美妙之处在于,它们避免了所有这些废话,但它们也有自己的一系列问题。我个人会坚持最后一个选择,而且在过去运气不错。

 类似资料:
  • 我正在寻找一些库或代码示例,将 FastAPI 验证消息格式化为人类可读的格式。例如,此endpoint: 如果我们缺少<code>name</code>查询参数,将生成下一个json输出: 所以我的问题是,如何: 将其转换为“名称字段是必需的”(对于各种可能的错误)以在 Toast 中显示。 使用它来显示表单验证消息 如果可能,从 api 描述自己生成表单

  • 使用用户证书验证 SSH (服务端) 在以安全为前提下要保障可靠性、可控性和一致性是非常复杂的。我们可以利用 SSH 又或者说 OpenSSH 来替代所依赖的中央身份验证(比如 LDAP 或者 Kerberos) 除了 通过 PIV 和 PKCS#11 验证 SSH 之外,还可以增加远程 SSH 验证的安全性。Facebook 和 Yahoo 已经更换使用 SSH 用户证书来避免中心认证系统宕机。

  • 我按照这个指令创建了一个grpc服务器和客户端:https://docs . Microsoft . com/en-us/aspnet/core/tutorials/grpc/grpc-start?view=aspnetcore-3.0 当我尝试从客户端调用服务时,客户端会显示以下错误消息:“发生了一个或多个错误。(状态(StatusCode=Unknown,Detail=No Status re

  • 我正在处理引导表。文之心自举表的扩展。 引导表可编辑 我正在使用OnEditable向服务器发送数据(使用Laravel处理服务器请求)。我收到关于结果的错误代码作为回报。但我似乎找不到一种方法来显示可编辑的Popover上的错误,或者阻止用旧值替换新值。当我们验证输入时,会显示Like错误。 我已经检查了可编辑的- 这是我的密码: 我希望这种错误会显示: 预期产出

  • 问题内容: 我正在使用具有以下功能的simplehtmldom: 我这样使用它: 有时,URL可能只是无效的,我想对此进行处理。我以为我可以使用try and catch,但是这没有用,因为它不会抛出异常,它只是给出了这样的php警告: 第39行在上面的代码中。 我如何正确处理此错误,我可以只使用普通条件,它看起来不像返回布尔值。 谢谢大家的帮助 更新资料 这是一个好的解决方案吗? 问题答案: 这

  • 本文向大家介绍Yii使用ajax验证显示错误messagebox的解决方法,包括了Yii使用ajax验证显示错误messagebox的解决方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Yii使用ajax验证显示错误messagebox的解决方法。分享给大家供大家参考。具体方法如下: yii 自带了ajax 表单验证 这个可能有些朋友不知道了,但我今天在使用yii 自带的ajax 表单