这是一个比较宽泛的问题,因为它与Java Spring和Python都有关系,但由于以下原因,我不能确切地说出错误在哪里:
- Postman中的POST请求工作正常,没有错误
1.使用requests库的Python请求不起作用,并返回错误400
1.在我的Java Spring应用程序中,在Python上尝试POST之后,我可以在终端中看到以下内容:Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of
[组].状态数据到(although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value [JSON STRING]
相关文件上的代码片段:
StatsDto.java 注意:我尝试不使用@JsonProperties注解和后面的注解,但得到了相同的结果。
public class StatsDto {
@NotBlank
private String codec;
@NotBlank
private String video;
@NotBlank
private String resolution;
@NotNull
private float fps;
@NotNull
private int nFrames;
@NotNull
private int qp;
@NotNull
private float yPSNR;
@NotNull
private float uPSNR;
@NotNull
private float vPSNR;
@NotNull
private float yuvPSNR;
@NotNull
private float bitrate;
@NotNull
private float time;
public StatsDto() {
}
@JsonCreator
public StatsDto(@JsonProperty("codec") String codec, @JsonProperty("video") String video,
@JsonProperty("resolution") String resolution, @JsonProperty("fps") int fps,
@JsonProperty("nFrames") int nFrames, @JsonProperty("qp") int qp,
@JsonProperty("yPSNR") float yPSNR, @JsonProperty("uPSNR") float uPSNR,
@JsonProperty("vPSNR") float vPSNR, @JsonProperty("yuvPSNR") float yuvPSNR,
@JsonProperty("bitrate") float bitrate, @JsonProperty("time") float time) {
this.codec = codec;
this.video = video;
this.resolution = resolution;
this.fps = fps;
this.nFrames = nFrames;
this.qp = qp;
this.yPSNR = yPSNR;
this.uPSNR = uPSNR;
this.vPSNR = vPSNR;
this.yuvPSNR = yuvPSNR;
this.bitrate = bitrate;
this.time = time;
}
HttpContent.py
class HttpContent:
(...)
def POST(self) -> requests.Response:
mock_dict = {
"codec": "SVT-AV1",
"video": "bowling_cif",
"resolution": "800x600",
"fps": 29.97,
"nFrames": 300,
"qp": 27,
"yPSNR": 32.05,
"uPSNR": 39.78,
"vPSNR": 31.423,
"yuvPSNR": 37.32193728,
"bitrate": 2178327.32,
"time": 83289382.3289
}
response = requests.post(self.base_url, headers={'content-type': 'application/json'}, json=json.dumps(mock_dict))
return response
app.py
http = HttpContent("[LINK]")
print(http.POST())
我尝试过在Java应用程序中更改注解、创建一个空的构造函数和一个完整的构造函数、检查Python中的语法、使用str()将dict硬编码为字符串等,但没有任何效果。
1条答案
按热度按时间wnrlj8wa1#
幸运的是,尽管我已经找了一段时间,但我还是设法在问了几分钟后就找到了答案。下面是我所做的,以防你遇到同样的问题:
我发现Postman可以使用右边的〈〉按钮为您的请求生成代码。只需输入您想要使用的语言和库,然后复制代码。在我的例子中,那是Python / Requests。它给了我一个与我正在使用的代码略有不同的代码,但主要区别在于它使用
data
而不是json
作为参数,并且使用requests.request("POST")
方法而不是简单地使用requests.post()
。