我在这里看到了一些你应该解决的问题。让我们开始讨论 REST 标准,第一条规则是将端点视为资源的表示,而不是操作,例如,在您的代码中,我假设MyObject
该类表示一个点(您应该重构该类以具有正确的名称) ,那么 的路径值getObject
可以是“ /point ”。这些操作映射到 HTTP 方法上,因此:
- GET:获取有关资源的信息。
- POST:创建资源。
- PUT:更新资源。
- 删除:删除资源。
在getObject
您期望收到一个对象时。根据 REST 标准的 get 方法意味着您要检索一些数据,通常您发送一些包含在 url 中的数据,例如 ../app-context/get/{id},这里 id 是一个参数,告诉您的控制器你想要一些属于一个 id 的信息,所以如果你调用像 ../app-context/get/1 这样的端点来获取一些由数字 1 标识的域对象的信息。
如果要向服务器发送数据,最常见的 HTTP 方法是 POST。
据此,在设计级别,您应该:
- 为 MyObject 类指定一个有意义的名称。
- 在 中检查您要进行的操作
getObject
。
- 分配
getObject
表示资源的路径。
在代码级别,使用上述注释,您可以将其更改为:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MyObject {
@Min(-180) @Max(180)
private double x;
@Min(-90) @Max(90)
private double y;
}
@PostMapping("/point")
public ResponseEntity savePoint(@RequestBody @Valid MyObject myObject) {...}
我将解释这些变化:
- 添加 @PostMapping 以符合 REST 标准。
- 添加@RequestBody,此注解将信息发送到服务器并使用它来创建一个MyObject 对象。
- 将@NoArgsConstructor 添加到MyObject,默认情况下,反序列化使用默认构造函数(不带参数)。您可以编写一些专门的代码来使事情在没有默认构造函数的情况下工作,但这取决于您。