Postman POST请求可以正常工作,但在Python中却不行(Java Spring服务器、PostgreSQL)

tquggr8v  于 2022-12-23  发布在  Spring
关注(0)|答案(1)|浏览(1846)

这是一个比较宽泛的问题,因为它与Java Spring和Python都有关系,但由于以下原因,我不能确切地说出错误在哪里:

  1. 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硬编码为字符串等,但没有任何效果。

wnrlj8wa

wnrlj8wa1#

幸运的是,尽管我已经找了一段时间,但我还是设法在问了几分钟后就找到了答案。下面是我所做的,以防你遇到同样的问题:
我发现Postman可以使用右边的〈〉按钮为您的请求生成代码。只需输入您想要使用的语言和库,然后复制代码。在我的例子中,那是Python / Requests。它给了我一个与我正在使用的代码略有不同的代码,但主要区别在于它使用data而不是json作为参数,并且使用requests.request("POST")方法而不是简单地使用requests.post()

相关问题