有一项名为
的外部服务http://externalServer:9000/pathServer/serviceCalled
此服务作为输入参数接收对象列表。
class BarSpecialMsg extends BarBaseMsg implements SpecialMsg {
private CommonSpecialMsg composedSpecialMsg;
...
}
class FooSpecialMsg extends BarBaseMsg implements SpecialMsg {
private CommonSpecialMsg composedSpecialMsg;
...
}
在我的后端,我打电话给这项服务,因为它不在我的域中。为此,我使用了Spring的RestTemplate。
我已经使用过这个,但是当我拨打电话时,它会给我一个400错误的请求错误。
这是我的代码。
Request
[
{ "atr1" : "value" },
{ "atr1" : "value" },
{ "atr1" : "value" },
{ "atr1" : "value" }
]
STResponse的输出打印是
我知道请求是正确的,因为当我用邮递员发送它时,它工作正常。
我做错了什么?
答案 0 :(得分:0)
您是否尝试过使用RequestEntity而不是HTTPEntity?
Spring的javadoc有一个你可以遵循的例子。
https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/RequestEntity.html
答案 1 :(得分:0)
正如在评论中已经说过的那样,尝试使用一个名为Request
的字段atr1
,以及一个名为Result
和{{1}的两个字段code
的其他类message
}}:
class Request {
private String atr1;
// getter, setter
}
class Result {
private String code;
private String message;
// getter, setter
}
然后
List<Request> data = new ArrayList<>();
Request req1 = new Request();
req1.setAtr1("value");
data.add(req1);
Request req2 = new Request();
req2.setAtr1("value");
data.add(req2);
String url = "http://externalServer:9000/pathServer/serviceCalled";
ResponseEntity<Result> response = restTemplate.postForEntity(url, data, Result.class);
答案 2 :(得分:0)
我在删除方法中使用rest模板遇到了这个问题,经过长时间的调试后才发现它!这个问题与在rest模板中使用ClientHttpRequestFactory
类的错误配置有关,使用另一个SimpleClientHttpRequestFactory
之类的东西,依此类推,例如我使用下面的代码来支持正文消息的所有方法:
public class CustomSimpleClientHttpRequestFactory extends
SimpleClientHttpRequestFactory {
@Override
protected void prepareConnection(HttpURLConnection connection, String httpMethod)
throws IOException {
super.prepareConnection(connection, httpMethod);
connection.setDoOutput(true);
}
}
并在RestTemplate中对其进行配置,如下所示:
RestTemplate restTemplate = new RestTemplate(new CustomSimpleClientHttpRequestFactory());
restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
/* and other configure you like*/