2017-07-20 319 views
0

我使用@RestController@RequestMapping註釋來定義我的所有servlet與spring-mvc如何設置@RequestMapping的默認值?

問題:如何爲這些註釋定義一些默認值,因此我不必重複關於例如consumesproduces的相同配置?

我想總是採用以下配置,而不必重複每條路徑上:

@GetMapping(produces = {APPLICATION_XML_VALUE, APPLICATION_JSON_VALUE}) 

@PostMapping(
consumes = {APPLICATION_XML_VALUE, APPLICATION_JSON_VALUE}, 
produces = {APPLICATION_XML_VALUE, APPLICATION_JSON_VALUE}) 
+0

我很久沒做spring-mvc了,但是不能只寫自己的註釋嗎? –

+1

不幸的是,@GetMapping具有'@Target(ElementType.METHOD)',所以我不能只創建自己的註釋並重用它。我也不能將註釋添加到我的servlet控制器的類級別。在課堂級別上不允許... – membersound

+1

您可以在課堂級別的RequestMapping上應用生產和消費。 –

回答

0

RequestMapping註釋目標可以是一個方法或類。它可以用來代替僅針對方法的註釋GetMappingPostMapping

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/GetMapping.html

具體而言,@GetMapping是充當 快捷方式@RequestMapping(方法= RequestMethod.GET)一個組成註釋。

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/PostMapping.html

具體而言,@PostMapping是充當 快捷方式@RequestMapping(方法= RequestMethod.POST)一個組成註釋。

假設你的控制器名稱爲HelloController,在Class級別添加註釋RequestMapping用適當的方法,因此它會自動適用於所有的路徑。

@Controller 
@RequestMapping(method={RequestMethod.GET,RequestMethod.POST}, consumes = { MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE },produces = { MediaType.APPLICATION_XML_VALUE,MediaType.APPLICATION_JSON_VALUE },) 
class HelloController{ 
} 

這種配置可以通過在單獨的方法中註釋來覆蓋。

+0

我不想在'GET'上設置'consumes'!只有在後。 – membersound

+1

@membersound - 我認爲這是你所能做的。休息必須在方法級別註釋中重寫。 – Beginner

0

也許最簡單的方法就是創建一個自定義@RestController註釋並在classlevel上使用它。然後,我只需要重複@PostMapping(consumes...)映射:

@Target(ElementType.TYPE) 
@Retention(value=RUNTIME) 
@RestController 
@RequestMapping(produces = {APPLICATION_JSON_VALUE, APPLICATION_XML_VALUE}) 
public @interface DefaultRestController { 

} 

用法,如:

@DefaultRestController 
public class MyServlet { 
     @GetMapping("/getmap") //inherits the 'produces' mapping 
     public void getmap() { 
     } 

     @PostMapping("/postmap", consumes = {APPLICATION_JSON_VALUE, APPLICATION_XML_VALUE}) 
     public void postmap() { 
     } 
} 

聊勝於無。

0

您可以在課堂上添加註釋。下面是一個例子:

@RestController 
@RequestMapping(
    consumes = {APPLICATION_XML_VALUE, APPLICATION_JSON_VALUE}, 
    produces = {APPLICATION_XML_VALUE, APPLICATION_JSON_VALUE} 
) 
public class MyClass { 

    // after that you don't have to put any 
    // @RequestMapping default values before methods 

} 
+0

同樣,如前所述:我不想(!)想在get + post(這是你的代碼中的情況)上設置'consumes'屬性。 – membersound