是否有可能在給定@ControllerAdvice
某種方式得到一個@PathVariable
的保持了PathVariable只存在於一些請求?Spring可選@PathVariable?
如果這是一個控制器,我可以寫2個不同的控制器。但ControllerAdvice
始終適用於所有請求。我不能只有ControllerAdvice適用於PathVariable定義的控制器。
是否有可能在給定@ControllerAdvice
某種方式得到一個@PathVariable
的保持了PathVariable只存在於一些請求?Spring可選@PathVariable?
如果這是一個控制器,我可以寫2個不同的控制器。但ControllerAdvice
始終適用於所有請求。我不能只有ControllerAdvice適用於PathVariable定義的控制器。
您可以注入路徑變量的Map並檢查密鑰的存在。
public void advise(@PathVariable Map<String, String> pathVariables) {
if (pathVariables.containsKey("something")) {
String something = pathVariables.get("something");
// do something
} else {
// do something else
}
}
工作正常!謝謝! – rustyx 2015-03-14 14:39:07
這個答案是可以的,但是我花了一段時間才發現需要在函數前添加@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 { .... }
「@ PathVariable'不@ExceptionHandler方法確實支持。 – 2014-09-02 13:51:23
您可以根據需要擁有儘可能多的@ControllerAdvices。但我想知道爲什麼你需要'@ PathVariable'。 – zeroflagL 2014-09-03 07:20:18