2017-07-20 278 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