我已经找到了这个问题的答案,我找到了以下建议:
但是我应该如何在我的(如此随意的)案例中解释它们: 我的网络应用控制器正在接收显示具有特定ID的用户的详细信息的请求。 Controller要求服务层获取用户,然后服务返回该对象(如果已找到)。如果没有,则会重定向到“默认”位置。
如果有人在请求网址中传递了无效的用户ID,我该怎么办?我应该将其视为“预期行为”并将null返回给控制器,或者我应该将其称为“问题或意外行为”,从而在服务方法中抛出异常并捕获控制器内部?
从技术上讲,它毕竟不是一个很大的区别,但我希望通过遵循标准对流来做正确的方法。提前感谢任何建议。
编辑: 我假设,应用程序生成的URL有效且存在 - 当用户单击时,应找到具有certaing id的用户。当用户尝试通过在浏览器的地址栏中手动输入URL来尝试访问具有错误(不存在)用户ID的URL时,我想知道如何处理这种情况。
答案 0 :(得分:4)
如果我理解正确,包含用户ID的请求来自客户端(不受控制)。应用你引用的经验法则:无效的用户输入是一个完全可以预期的情况,它不需要异常,而是通过向客户端返回适当的错误消息来优雅地处理空值。
(OTOH如果请求中的用户ID是由来自DB等的其他应用程序自动生成的,则无效的用户ID将是意外的,因此异常是合适的。)
答案 1 :(得分:0)
我的个人建议是记录错误详细信息(IP地址,无效的用户ID),并将用户重定向到错误页面,该页面表示发生了一些错误并且已通知管理员。点击so-n-so链接返回主页等。
指出,无论是抛出异常还是返回null
,只需确保最外面的过滤器或处理程序在将响应返回给用户之前“记录”详细信息。
答案 2 :(得分:0)
What should I do when someone passes invalid user id inside the request URL?
您有两种选择:显示您提到的“默认”页面或返回“未找到”/ 404.
关于 null ,它取决于。如果你认为 null 对引用不可接受,那么用@NotNull
注释它,注释 在得到 null时负责做正确的事情引用:即抛出(未经检查的)异常(当然,您需要使用令人惊奇的@NotNull注释才能使其工作)。
你在连锁店中做的更高的事情取决于你:对我来说,给那些试图伪造用户ID的人返回404听起来非常接近最佳状态。