如何设置@RequestMapping的默认值?

时间:2017-07-20 12:48:28

标签: java spring spring-mvc

我正在使用带有Dispatcher.Invoke(new Action(() => MethodName));注释的@RestController来定义@RequestMapping的所有servlet。

问题:如何为这些注释定义一些默认值,因此我不必重复相同的配置,例如spring-mvcconsumes

我想始终应用以下配置,而不必在每条路径上重复:

produces

3 个答案:

答案 0 :(得分:2)

可能最简单的方法是创建一个自定义@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() {
         }
}

总比没有好。

答案 1 :(得分:0)

RequestMapping注释的目标可以是方法或类。可以使用它来代替仅以方法为目标的GetMappingPostMapping注释。

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

  

具体来说,@ GetMapping是一个作为一个组成的注释   @RequestMapping的快捷方式(method = RequestMethod.GET)。

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

  

具体来说,@ PostMapping是一个作为一个组成的注释   @RequestMapping的快捷方式(method = RequestMethod.POST)。

假设您的控制器名称为HelloController,请使用RequestMapping级别的相应方法添加Class注释,以便它自动应用于所有路径。

@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{
} 

可以通过在单个方法中对其进行注释来覆盖这种认知。

答案 2 :(得分: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

}