我收到意外错误java.io.IOException: Stream closed
错误从这一行开始

public void createPo(String username, PurchaseOrderDto po, List<PoItemDto> items) {
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("poDto", po);
    params.put("items", items);
    rc.post(String.format("/po?username=%s", username), params);
}
rc是从另一个服务器调用api的其余客户端。这是其发布功能的代码
protected void post(String path, Object object) {
restTemplate.postForObject((url + path), object, Void.class);
}

以下是处理上述请求的api PoController.java
@ResponseStatus(HttpStatus.OK)
@RequestMapping(value = "/po", method = RequestMethod.POST)
public void createPo(@RequestParam("username") String buyerId, @RequestBody PurchaseOrderDto poDto, @RequestBody List<PoItemDto> items) {
    poService.createPo(buyerId, poDto, items);
}

来自处理请求的tomcat服务器的日志:
[http-bio-9080-exec-6]  ERROR ib.pms.controller.PoController - Stream closed java.io.IOException: Stream closed
    at org.apache.catalina.connector.InputBuffer.readByte(InputBuffer.java:301)
    at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:106)
    at java.io.FilterInputStream.read(FilterInputStream.java:83)
    at java.io.PushbackInputStream.read(PushbackInputStream.java:139)
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:168)
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:105)

我对此毫无意义。
有没有更干净的方法可以将参数传递给restApi?

最佳答案

您有两个@RequestBody,这是不可能的,您应该有一个包含Foo的对象PurchaseOrderDto po, List<PoItemDto> items(实现Serializable),然后在Foo中传递restTemplate.postForObject

因此,您的控制器必须更改为以下内容:

@ResponseStatus(HttpStatus.OK)
@RequestMapping(value = "/po", method = RequestMethod.POST)
public void createPo(@RequestParam("username") String buyerId, @RequestBody Foo foo) {
    poService.createPo(buyerId, foo.getDoDto(), foo.getItems());
}

我不确定这是否可以解决您的问题,但至少少了一个问题

如果要发送多个对象,仍然可以使用列表:@RequestBody List<Foo> foos

10-05 22:09
查看更多