【发布时间】:2019-07-03 13:09:51
【问题描述】:
我对 Java/Spring 还很陌生,并试图在现有项目中设置 API 端点。我基本上复制了一些当前正在工作的其他端点,但我的在被击中时没有验证,这似乎是因为 @RequestBody 没有填充被馈送到方法中的对象。
我已尝试删除 @NotNull,但仍然失败。这似乎很奇怪,因为其他端点正在使用@NotNull。
SampleRequest.java
import NotNull;
public class SampleRequest {
@NotNull
private String testString;
public void setTestString(String testString):
this.testString = testString;
public String getTestString():
return testString;
}
SampleRequestResource.java
import Valid
import NotNull
public class SampleRequestResource {
@NotNull;
@Valid;
private SampleRequest sample;
public SampleRequest getSample():
return sample;
public void setSampleRequest(SampleRequest sample):
this.sample = sample;
}
SampleController.java
import RequestBody
import RequestMapping
import RestController
@RestController
@RequestMapping("/foo")
public class SampleController(){
@RequestMapping("/{id}/bar", method = request.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<SampleResponseResource> stuff(
@Valid @RequestBody SampleRequestResource request) {
do stuff;
return response;
})
}
test.py
import requests, json
header = {"Content-Type":"application/json"}
data = {"testString": "foo"}
test = requests.post(url, header=header, json=data, verify=false)
当我运行test.py 时,我希望它能够正确返回,但是我收到了一个验证错误,因为sample 是来自SampleRequestResource.java 的null
我假设 @RequestBody 应该解析请求,当它调用 SampleRequestResource 时,它会将解析后的请求推送到 SampleRequest 并验证就好,因为这似乎是在其余部分发生的API(就像我说的,我直接复制/更改了其他工作端点来创建我的。)
【问题讨论】:
-
你说的不是真的!为了通过验证,您应该使用以下 json 进行反序列化:
{ "sample" : {"testString": "foo"} }. -
您的代码不是有效的 Java 代码。发布有效的 Java 代码。
标签: java spring spring-mvc