[英]Spring Controller: Custom annotation with combined Spring annotations does not work
我有正常工作的Spring Controller,在這里我有以下方法映射的方法
@RequestMapping(
value = "/users"
consumes = MimeTypeUtils.APPLICATION_JSON_VALUE,
produces = MimeTypeUtils.APPLICATION_JSON_VALUE,
method = RequestMethod.GET)
@ResponseBody
@ResponseStatus(HttpStatus.OK)
public UserResponse retrieveUsers() {
return new UserResponse();
}
@RequestMapping(
value = "/contracts"
consumes = MimeTypeUtils.APPLICATION_JSON_VALUE,
produces = MimeTypeUtils.APPLICATION_JSON_VALUE,
method = RequestMethod.GET)
@ResponseBody
@ResponseStatus(HttpStatus.OK)
public ContractResponse retrieveContracts() {
return new ContractResponse();
}
這可以正常工作,可以接受GET
請求,例如在POST
情況下,我會收到正確的405
狀態代碼。
現在,我想介紹自定義組合注釋,而不是在每個方法中都使用相同的注釋。
我的自定義注釋看起來像
@RequestMapping(
consumes = MimeTypeUtils.APPLICATION_JSON_VALUE,
produces = MimeTypeUtils.APPLICATION_JSON_VALUE,
method = RequestMethod.GET)
@ResponseBody
@ResponseStatus(HttpStatus.OK)
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Get {}
因此,我將方法更改為
@Get
@RequestMapping(value = "/users")
public UserResponse retrieveUsers() {
return new UserResponse();
}
在這種情況下,我可以看到我發送給/users
任何類型的請求都可以正確處理。 例如,即使執行POST
,我也會看到響應。 因此,@ @RequestMapping
無法正常工作。
我在這里做錯了什么? 是否可以通過自定義組合注釋使控制器正常運行?
您將覆蓋在@Get
注釋中設置的@RequestMapping
注釋。 因此,它僅指定請求映射的value
部分,而將所有其他屬性保留為默認值。
我懷疑UserResponse#retrieveUsers
上的@RequestMapping(value = "/users")
替換了@Get
接口上的@RequestMapping
。
查看是否可行:
@RequestMapping(
consumes = MimeTypeUtils.APPLICATION_JSON_VALUE,
produces = MimeTypeUtils.APPLICATION_JSON_VALUE,
method = RequestMethod.GET)
@ResponseBody
@ResponseStatus(HttpStatus.OK)
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Get {
@AliasFor(annotation = RequestMapping.class, attribute = "value")
String[] value() default {};
}
@Get(value = "/users")
public UserResponse retrieveUsers() {
return new UserResponse();
}
請注意, @ AliasFor僅在Spring 4.2中發布。 在早期版本中不可用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.