如果PathVariable仅出现在某些请求中,是否有可能以某种方式获得 @ControllerAdvice
中的@PathVariable
?
如果这是在Controller中,我可以编写2个不同的控制器。但ControllerAdvice
始终适用于所有请求。我不能将ControllerAdvice仅应用于定义了PathVariable的控制器。
答案 0 :(得分:3)
您可以注入路径变量的Map并检查是否存在密钥。
public void advise(@PathVariable Map<String, String> pathVariables) {
if (pathVariables.containsKey("something")) {
String something = pathVariables.get("something");
// do something
} else {
// do something else
}
}
答案 1 :(得分:1)
这个答案还可以,但我花了一些时间才发现你需要在函数之前添加@ModelAttribute注释。另外很高兴知道您可以注入在控制器@RequestMapping端使用的任何变量。例如,整个班级看起来像
@ControllerAdvice(basePackages = {"test.web.controller"})
public class SomeAdvicer {
@ModelAttribute
public void advise(@PathVariable Map<String, String> pathVariables, SomeOtherClass ctx) {
if (pathVariables.containsKey("something")) {
if (!pathVariables.get("something").equals(ctx.getSomething())){
throw new Exception("failed");
}
}
}
}
当您的控制器看起来像
时@RequestMapping(method = RequestMethod.PUT, value = "/{something}")
@ResponseBody
public ResponseEntity<test> updateDemo(
@PathVariable(value = "invoicerId")
@RequestBody RequestMessage requestBodyMessage,
SomeOtherClass ctx) throws RestException { .... }