java – Spring REST重用嵌套的requstmapping
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Spring REST重用嵌套的requstmapping,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3521字,纯文字阅读大概需要6分钟。
内容图文
![java – Spring REST重用嵌套的requstmapping](/upload/InfoBanner/zyjiaocheng/727/4077777aa5ce4d1898e3c02d23ac8987.jpg)
我们有一个REST API,用于一些评论.目前,最有趣的URI是:
GET /products/1/comments // get all comments of product 1
GET /products/1/comments/5 // get the 5th comment of product 1
GET /products/1/comments/5/user // get the user of the 5th comment
GET /products/1/comments/latest // get the latest comment of product 1
GET /products/1/comments/latest/user // get the user of the latest comment
此外,您还可以直接访问评论
GET /comments/987 // get the comment with id 987
GET /comments/987/user // get the user of comment with id 987
所以,我们有两个@RestController:
@RestController
@RequestMapping("/products/{productId}")
public class ProductsCommentsResource {
@GetMapping(value = "/comments")
public ResponseEntity<?> getComments(@PathVariable Long productId){
// get all products...
}
@GetMapping(value = "/comments/{commentNr}")
public ResponseEntity<?> getComment(@PathVariable Long productId, @PathVaraible Long commentNr){
// get comment with number commentNr of product productId
}
@GetMapping(value = "/comments/{commentNr}/user")
public ResponseEntity<?> getCommentUser(@PathVariable Long productId, @PathVaraible Long commentNr){
// get the user of comment with commentNr of productId
}
@GetMapping(value = "/comments/latest")
public ResponseEntity<?> getLatestComment(@PathVariable Long productId){
// get latest commentNr and call getComment(productId, commentNr)
}
@GetMapping(value = "/comments/latest/user")
public ResponseEntity<?> getLatestCommentUser(@PathVariable Long productId){
// get latest commentNr and call getCommentUser(productId, commentNr)
}
}
@RestController
@RequestMapping("/comments")
public class CommentsResource {
@GetMapping(value = "/{commentId}")
public ResponseEntity<?> getComment(@PathVaraible Long commentId){
// get comment id commentId
}
@GetMapping(value = "/{commentId}/user")
public ResponseEntity<?> getCommentUser(@PathVaraible Long commendId){
// get the user of comment with id commentId
}
}
因此,最新版本只是“获取最后一条注释并使用此commentId调用相应方法”的替换关键字
这只是一个摘录,除了用户之外,评论还有大约30个子资源和子资源(包括POST,DELETE等方法).
因此,我们或多或少都有三次.
所以,显然,我们需要改进这一点,删除重复的代码等.
我们的想法是“封装”评论资源,并通过使用在类中注释的@RequestMapping使其可重用.
我们考虑过像以下一样的机制:
>调用/ products / 1 / comments / latest / user
>呼叫被拦截,产品1的“最新”被解析为commentId
>调用将重定向到“/ comments / {commendId} / user
因此,我们需要有重定向的东西
– / products / 1 / comments / latest [what ever] to / comments / {commentId} [what ever]
– / products / 1 / comments / 5 [还有什么]还有/ comments / {commentId} [什么都有]
和/ comments / {commentId}将是唯一的实现.
但是,我们在春季文档中找不到任何合适的内容……
解决方法:
您可以在控制器的@RequestMapping中添加其他URL路径前缀.
@RequestMapping(value = { "/products/{productId}", "/" })
这意味着您可以删除CommentsResource控制器,并且您将能够访问相同的资源:
/products/1/comments/5
并在
/comments/5
例如,这里:
@GetMapping(value = "/comments/{commentNr}")
public ResponseEntity<?> getComment(@PathVariable Long productId, @PathVaraible Long commentNr){
// get comment with number commentNr of product productId
}
显而易见的问题是productId路径变量.如果您使用的是Java 8,那么使用Optional可以很容易地解决这个问题:
@GetMapping(value = "/comments/{commentNr}")
public ResponseEntity<?> getComment(@PathVariable Optional<Long> productId, @PathVaraible Long commentNr){
// get comment with number commentNr of product productId
// Check whether productId exists
}
内容总结
以上是互联网集市为您收集整理的java – Spring REST重用嵌套的requstmapping全部内容,希望文章能够帮你解决java – Spring REST重用嵌套的requstmapping所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。