gpt4 book ai didi

具有整数值的请求参数的Spring RestTemplate postforobject

转载 作者:行者123 更新时间:2023-12-01 14:57:09 25 4
gpt4 key购买 nike

我在 Spring rest 服务中有一个方法。

@RequestMapping(value = "test/process", method = RequestMethod.POST)
public @ResponseBody MyResponse processRequest(String RequestId, int count)

我正在使用 Spring RestTemplate 来调用此服务。

RestTemplate restTemplate = this.getRestTemplate();
MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>();
map.add("RequestId", RequestId);
map.add("count", count);
restTemplate.postForObject(url, map,MyResponse.class);

当我尝试调用客户端方法时,出现异常找不到适合请求类型 [java.lang.Integer] 的 HttpMessageConverter

org.springframework.http.converter.HttpMessageNotWritableException: Could not write request: no suitable HttpMessageConverter found for request type [java.lang.Integer]
at org.springframework.http.converter.FormHttpMessageConverter.writePart(FormHttpMessageConverter.java:310)
at org.springframework.http.converter.FormHttpMessageConverter.writeParts(FormHttpMessageConverter.java:270)
at org.springframework.http.converter.FormHttpMessageConverter.writeMultipart(FormHttpMessageConverter.java:260)
at org.springframework.http.converter.FormHttpMessageConverter.write(FormHttpMessageConverter.java:200)
at org.springframework.http.converter.FormHttpMessageConverter.write(FormHttpMessageConverter.java:1)
at org.springframework.web.client.RestTemplate$HttpEntityRequestCallback.doWithRequest(RestTemplate.java:596)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:444)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:409)
at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:287)

我知道其中一种方法是将所有参数作为字符串传递。但我可能需要稍后将复杂的数据类型作为参数传递。实现这一目标的方法是什么。我用谷歌搜索了一下,有些选项似乎是在编写我自己的转换器。我应该如何着手解决这个问题。

最佳答案

此错误的根本原因是,通过在 LinkedMultiValueMap 中指定一个 IntegerRestTemplate 会将其视为您的请求是一个多部分请求。没有默认注册的 HttpMessageConverter 可以处理将 Integer 类型的值写入请求正文。

如您所说,您可以通过将 count 更改为 String 来处理这种情况。毕竟HTTP请求参数中没有Integer类型。然而,你很担心

But I might need to pass complex data types as parameters later.

假设是这样的

public @ResponseBody MyResponse processRequest(String RequestId, int count, Complex complex) {

public class Complex {
private String someValue;
private int intValue;

public String getSomeValue() {
return someValue;
}

public void setSomeValue(String someValue) {
this.someValue = someValue;
}

public int getIntValue() {
return intValue;
}

public void setIntValue(int intValue) {
this.intValue = intValue;
}

public String toString() {
return someValue + " " + intValue;
}
}

以下将正常工作

MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>();
map.add("RequestId", "asd");
map.add("count", "42");
map.add("someValue", "complex");
map.add("intValue", "69");
restTemplate.postForObject(url, map,MyResponse.class);

请记住,请求参数用于按名称填充模型属性的字段。

更好的解决方案是使用 JSON 或 XML 等序列化标准。

关于具有整数值的请求参数的Spring RestTemplate postforobject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20479074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com