正如标题所说,我想知道如果produces = MediaType.APPLICATION_JSON_VALUE
控制器已经用 注释,我是否还需要在控制器的方法中声明@RestController
?我正在开发一个旧的遗留应用程序,其中所有控制器方法都声明了这一点。Spring Boot Initializr 会在没有它的情况下生成默认的 REST 控制器,即使我省略它MediaType.APPLICATION_JSON_VALUE
,它仍然可以正常工作。我记得在某个地方看到过应该是默认的。正确与否?
@RestController
@RequestMapping("/posts")
@Slf4j
public class PostsController {
@PutMapping(value = "posts/{post_d}", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Post> getPost(@PathVariable Long postId) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
首先要承认/记住的是@RequestMapping
注释(或专门的@GetMapping
,@PostMapping
等等)中的所有内容都是用于映射。因此,那个东西被命名为@RequestMapping
。它不会对所写的响应施加任何强制。事实上,该produces
属性实际上采用String[]
,以便您可以限制Accept-Header
此方法将匹配的响应类型( )。因此,如果您produces = MediaType.APPLICATION_JSON_VALUE
只在响应中明确接受的请求application/json
才会转到此方法。
事实上,它用于映射/路由,因此对于同一 URL 有多种方法但产生不同的结果非常有用。假设您有一个请求方法,可以生成可以 XML 或 PDF 格式创建的报告。但 PDF 更复杂,因此您需要不同的方法。
@RequestMapping(value="/report", produces = "application/xml")
public ReportXml generateXmlReport() {}
@RequestMapping(value="/report", produces = "application/pdf")
public void generateXmlReport(HttpServletResponse response) {
// use iText to generate a PDF and directly write to the response
}
Run Code Online (Sandbox Code Playgroud)
现在,由于produces
Spring MVC 可以使用它来将传入请求路由到正确的请求处理方法。
归档时间: |
|
查看次数: |
2829 次 |
最近记录: |