我在一个表中有两个唯一的键:id
和userId
。我必须在Spring中创建一个REST API,以获取用户详细信息,如果这两个键中的任何一个作为路径变量给出。
这里的挑战是我们必须创建两个不同的端点,通过id
获取用户和通过userId
获取用户,但两者使用相同的方法。在我的表中,id
的数据类型是long
,userId
的数据类型是String
。
因此,我尝试做以下工作:
@RequestMapping(value = {"/{id}","/user/{id}"}, method=RequestMethod.GET)
public response getUser(@PathVariable("id") String id) {
}
但是我不知道如何检查我在方法中得到的是id
还是userId
,这是正确的方法吗?
3条答案
按热度按时间h43kikqp1#
你可以用这样的方法来实现:
}
rbl8hiat2#
我将使用
@RequestMapping
多个路径Map到同一个控制器方法的可能性,在这样的方式。我怀疑,即使您重构代码以调用单个方法,您仍然必须实现一些逻辑来区分控制器方法中的两个参数。
此外,
getUserById()
签名是二义性的,参数id
意味着id
还是userId
有两个单独的方法来实现你想要的会更有效,两个方法可以正确地处理每种情况。如果你愿意,在每个控制器方法中,你可以为这两个方法使用一个公共逻辑。
您甚至可以为每个端点实现验证器,以检查您@PathVariable是否有效(如果是
Long
或String
)以下是一些参考ref1、ref2
c6ubokkw3#
难道你不能重构数据库使其只有一个id吗?这会使事情变得清晰,并保持代码的整洁。
如果这是不可能的,你可以创建两个有意义的名字的方法。
您可以讨论有关方法的正确名称/签名。
这种方法的另一个优点是,您可以为每个文档添加Swagger文档注解。