我正在使用带有Dispatcher.Invoke(new Action(() => MethodName));
注释的@RestController
来定义@RequestMapping
的所有servlet。
问题:如何为这些注释定义一些默认值,因此我不必重复相同的配置,例如spring-mvc
和consumes
?
我想始终应用以下配置,而不必在每条路径上重复:
produces
答案 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
注释的目标可以是方法或类。可以使用它来代替仅以方法为目标的GetMapping
和PostMapping
注释。
具体来说,@ GetMapping是一个作为一个组成的注释 @RequestMapping的快捷方式(method = RequestMethod.GET)。
具体来说,@ 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
}