java - HTTP请求参数类型传播

标签 java http rest web-applications

我有一个简单的网络应用程序,它将请求传播到另一个网络应用程序。我的 Web 应用程序提供了两个非常相似的 API,它们查询相同的 Web 应用程序,但查询不同类型的信息。例如,我的网络应用程序采用这两个 URL

http://myservice.com:8080/otherservicecall1?userId=(userid)

http://myservice.com:8080/otherservicecall2?accountId=(accountid)

如果我想为我的网络应用程序使用相同的服务和数据层,区分这些请求的两个不同参数的最佳方法是什么?例如,我的数据层中有一个类,它处理来自其他服务的 404,其中包含诸如

之类的日志消息
log.error("Could not find information on userId = " + userId);

但是像这样的日志和异常消息不够通用,无法应用于这两种类型的请求,这意味着我必须传入一个仅保存参数名称的参数类型变量。

我想我最终要问的是,是否有一种简单的方法可以通过服务和数据层传播我通过 Controller 传入的参数名称,而无需通过每个函数调用传递它?我曾想过以某种方式使用枚举,但我看不出它们在这里有何帮助。

最佳答案

对于异常,我们抛出一个通用的 ObjectNotFoundException,它有一个方法可以返回我们正在查找的对象的 id。如果我们需要专门的异常消息,我们将使用更具体的内容扩展 ObjectNotFoundException,然后更新 Spring SimpleMappingExceptionResolver 来处理新的、更具体的异常。

我们确保将最常见的异常 (ObjectNotFoundException) 保留在异常映射列表的最后。

对于服务,我不会担心参数是称为 userid 还是 accountid。这两个参数的行为应该是相同的。如果您担心这一点,那么您的用户界面层正在渗透到您的服务层和持久层中;这是一件坏事。

关于java - HTTP请求参数类型传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24067655/

相关文章:

Java NoClassDefFoundError

java - 项目方面 Cloud Foundry 独立应用程序版本 1.0 不受支持

java - 使用 Spring 将 javax.inject.Provider<T> 注入(inject)构造函数时出现 NoSuchBeanDefinitionException

http - 如何提供 CSS 文件并具有动态路由?

javascript - 将值从我的网站发送到 Amazon Echo 技能的 Lambda 函数

django - token 的有效期是多长时间? Django REST 框架

java - Android:显示默认 Activity 而不是启动器

http - 为什么在 RESTful 调用中使用 HTTP GET 更新服务器上的状态不正确?

javascript - 使用 Axios post 请求进行 JWT 授权

rest - 如何在 GraphQL 中对 "index"列表与 "show"详细信息进行建模?