我已将rest终结点方法定义为:
$curDate = Get-Date -Format yyyyMMdd
$destinationFolder = '\\TheMappedDrive\Share\AllDepts\OneDept\Copies of Logs\testVerifyLog'
$destinationFile = Join-Path $destinationFolder -ChildPath ('testVerifyLog_' + $curDate + '.xlsm')
copy-item '\\TheMappedDrive\Share\AllDepts\testVerifyLog.xlsm' -destination $destinationFile
这会将请求参数映射到MyObject。
MyObject定义为(带有lombok,javax.validation批注):
@GetMapping("/get")
public ResponseEntity getObject(@Valid MyObject myObject){....}
但是验证不起作用。即使值超出规定范围,请求也不会抛出错误并且运行顺利。
答案 0 :(得分:1)
如果您使用的是 Spring Boot > 2.3 版本,它现在会声明
<块引用>验证启动器不再包含在网络启动器中
...您需要自己添加启动器。
即
对于 Maven 构建,您可以执行以下操作:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
对于 Gradle,您需要添加如下内容:
dependencies {
...
implementation 'org.springframework.boot:spring-boot-starter-validation'
}
答案 1 :(得分:0)
我在这里看到几处您应该解决的问题。让我们开始讨论REST标准,第一个规则是在端点中认为是资源的表示,而不是操作的表示,例如,在您的代码中,我假设MyObject
类表示一个Point(您应该将类重构为(具有适当的名称),则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;
}
@PostMapping("/point")
public ResponseEntity savePoint(@RequestBody @Valid MyObject myObject) {...}
我将解释这些变化:
答案 2 :(得分:0)
使用org.springframework.validation.annotation.Validated
答案 3 :(得分:0)
我只需要添加以下依赖项即可使验证正常工作。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>