我从Rest开始,我有一些问题:
@Controller
是否必须按原样返回 Item
对象,或者将其封装在响应实体
中以指定 http 状态代码。HttpMediaStatus.OK
(200) 和空返回或HttpStatus.NO_CONTENT
(204) 和空返回?第二部分:我看到可以在WS方法上指定@Produces
和@Consumes
,但这有什么用呢?我的应用程序和方法工作正常,为什么要指定MediaType。应用程序_JSON_VALUE
?Spring/SpringBoot是否会自动将Item
或ResponseEntity
json?
上下文:使用Spring Boot,hibernate,REST webservice。
谢谢你。
一个问题中有很多问题,我将提供简短的答案,并提供一系列相关文章和参考文档的链接。
控制器必须返回什么类型?
取决于您的注释和服务的RESTful性。有三种注释可用于控制器:@Controller
、@RestController
和
。
控制器是将类标记为控制器的基础注释。控制器endpoint方法的返回类型可以是很多东西,我邀请您阅读这篇专门的文章来了解它。在开发纯REST服务时,您将重点关注使用RestController和RepositoryRestControllerRestController
是Controller
ResponseBody。它将endpoint方法的返回值绑定到web响应正文:
@RestController
public ItemController {
@RequestMapping("/items/{id}")
public Item getItem(@PathVariable("id") String id) {
Item item = ...
return item;
}
}
这样,当您点击http://…/api/items/foo
时,Spring就会发挥其魔力,自动将项目转换为ResponseEntity,并带有相关的40X状态代码和一些默认的http头。
在某些时候,您将需要更好地控制状态代码和标头,同时仍然受益于Spring数据REST的设置。那时,您将使用具有响应实体的存储库控制器
如果给定项不存在,则在特定项的 GET 方法中使用什么 http 状态代码?
直言:用HttpStatus。未找到。你正在寻找一个不存在的资源,有问题。
话虽如此,如何处理项目中缺失的资源完全取决于你。如果你的工作流程证明了这一点,缺失的资源可能是完全可以接受的,它确实会返回20倍的响应,尽管如果你没有警告你的应用编程接口的用户或提供一些留档(我们是习惯和惯例的产物),你可能会感到困惑。但是我仍然会从404状态代码开始。
(…)@Produces和@消耗WS方法,但这有什么用呢?我的应用程序和方法都可以工作,为什么要指定MediaType.APPLICATION_JSON_VALUE?Spring/SpringBoot不会自动将Item或响应实体转换为json吗?
@Consumes
和@Produces
分别与来自请求的内容类型
和接受
标头进行匹配。这是一种限制终结点方法接受的输入和提供的输出的方法。
由于我们谈论的是 REST 服务,因此 API 客户端和服务之间的通信应采用 JSON 格式。多亏了Spring仇恨,答案实际上是使用
应用程序/哈尔json
内容类型格式化的。在这种情况下,您确实不能打扰这两个注释。如果您开发的服务接受不同的内容类型(应用程序/文本、应用程序/json、应用程序/xml 等),并且例如,向网站的用户提供 HTML 视图,向服务的自动客户端提供 JSON 或 XML 响应,则需要它们。
对于现实生活中的例子:
Facebook为应用程序提供了Graph API,让应用程序可以从其图形中读取/写入数据,而用户则很高兴(?)浏览网页
谷歌也使用谷歌地图API
CRUD代表创建,读取,更新,删除。这是四种方法(如果区分查看一个记录和查看所有记录,则是五种方法)。在Rails中,处理CRUD的规范方法似乎包括七种方法。例如,使用 速记法为Order对象创建路由会生成以下七条路由: 这就是我困惑的根源。为 和 设置单独的操作/路由有什么意义?使用单独的操作查看页面和在数据库中创建记录有什么好处?我理解它是如何在Rails中实现的,例如: 在使用Rails之前
我想回复ResponseEntity的回复。我对在ResponseEntity中提到返回类型的最佳实践有点困惑。 这是我的控制器: 我的主要责任: 这里我的返回类型是GenericResponse、AdminAccount。在ResponseEntity中提及所有退货类型是否是一种良好的做法? 哪个是最好的方法
在我的Play web应用程序中,我使用的是从未来获取结果。有没有其他更好的方法(使用最佳实践)从数据库中获得结果?如果我使用或我的控制器完成执行,结果还不在中。下面是我的控制器方法。一切正常,但我需要在Scala中遵循更多的最佳实践。 编辑:我已经在使用。但在这个例子中,我不能使用,基本上是因为。我想在验证json之前,我需要一个来包围该方法的所有代码。 使用平面地图和map的新方法。我的问题是
好的,所以我找不到关于这个主题的任何有用的材料,我找到的一大块文章中有一个方法是用@HystrixCommand注释的,并且定义了一个回退方法。 我找到的另一个解决方案是使用@DefaultProperties(defaultFallback=“fallbackMethod”),但问题是这些方法需要具有兼容的返回类型。 不幸的是,在我的服务中,我有许多具有完全不同签名的方法,我还需要掌握可抛出的方
提交对映改动 一次提交要包括一个相关改动。例如,对于两个错误的修复应该进行两次不同的提交。精简的提交可以让其他的开发团队人员更简单地明白其改动的用义。如果其中一次提交的改动出现了问题,也可以方便地回滚到改动之前的状态。借助暂存功能来标记相关的改动文件,Git 可以为你打造出非常精准的提交。 频繁地提交改动 经常性地提交改动可以确保不会出现特别庞大的提交,同时也可以比较精准地对应到所需要的改动上。此
我想从spring控制器返回一个字符串(json字符串)作为它接收到的AJAX调用的响应,响应可能会根据我是否提交了@Valid表单而有所不同。这就是我处理它的方式,我想知道这是否被认为是最佳实践?请注意,我使用的是@RestController,所以@ResonseBody应用所有方法。