Man*_*oid 5 rest lombok spring-boot javax.validation
我将休息端点方法定义为:
@GetMapping("/get")
public ResponseEntity getObject(@Valid MyObject myObject){....}
Run Code Online (Sandbox Code Playgroud)
这会将请求参数映射到 MyObject。
MyObject 定义为(带有 lombok、javax.validation 注释):
@Value
@AllArgsConstructor
public class MyObject {
@Min(-180) @Max(180)
private double x;
@Min(-90) @Max(90)
private double y;
}
Run Code Online (Sandbox Code Playgroud)
但验证不起作用。即使值超出规定范围,请求也不会抛出错误并且进展顺利。
小智 6
如果您使用的是 Spring Boot > 2.3 的版本,它现在会显示
\n\n\n验证启动器不再包含在网络启动器中
\n...你\xe2\x80\x99需要自己添加启动器。
\n
IE
\n对于 Maven 构建,您可以使用以下命令来完成此操作:
\n<dependency>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-starter-validation</artifactId>\n</dependency>\nRun Code Online (Sandbox Code Playgroud)\n对于 Gradle,您需要添加如下内容:
\ndependencies {\n ...\n implementation \'org.springframework.boot:spring-boot-starter-validation\'\n}\nRun Code Online (Sandbox Code Playgroud)\n\n
我在这里看到一些你应该解决的问题。让我们开始讨论 REST 标准,第一条规则是将端点视为资源的表示,而不是操作,例如,在您的代码中,我假设该类MyObject代表一个点(您应该重构该类以拥有适当的名称) ,那么 的路径值getObject可以是“ /point ”。这些操作被映射到 HTTP 方法上,相应地:
你期望getObject收到一个物体。根据REST标准的get方法意味着你想要检索一些数据,通常你发送一些包含在url中的数据,如../app-context/get/{id},这里的id是一个参数,告诉你的控制器您想要一些属于某个 id 的信息,因此如果您调用 ../app-context/get/1 之类的端点来获取由数字 1 标识的某个域对象的信息。
如果要向服务器发送数据,最常见的 HTTP 方法是 POST。
据此,在设计层面你应该:
getObject。getObject分配表示资源的路径。在代码级别,使用上述注释,您可以将其更改为:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MyObject {
@Min(-180) @Max(180)
private double x;
@Min(-90) @Max(90)
private double y;
}
Run Code Online (Sandbox Code Playgroud)
@PostMapping("/point")
public ResponseEntity savePoint(@RequestBody @Valid MyObject myObject) {...}
Run Code Online (Sandbox Code Playgroud)
我将解释这些变化:
| 归档时间: |
|
| 查看次数: |
5719 次 |
| 最近记录: |