我有一个简单的网络应用程序,它将请求传播到另一个网络应用程序。我的 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/