SpringMVC控制层接收前端多个参数
报错I/O error while reading input message; nested exception is java.io.IOException: Stream closed
【Controller】
@PostMapping("/list")
public Result<List<ReviseInfo>> list(@RequestBody ReviseInfo reviseInfo, @RequestBody ReviseRequest reviseRequest){
return reviseAdaptor.list(reviseInfo, reviseRequest);
}
【ReviseInfo】
@Data
public class ReviseInfo {
/** 主键Id */
@MongoId
private String id;
/** 稿件Id */
private String subjectId;
/** 版本Id */
private String versionId;
/** 疑似错误 */
private String fragOri;
/** 建议调整 */
private String fragFixed;
/** 1-未处理2-已忽略3-已纠正(3不存库) */
private Integer type;
}
【ReviseRequest】
@Data
public class ReviseRequest {
/** 纠错内容列表 */
private List<ReviseContent> data;
}
传参
{
// 当前稿件ID
"subjectId": "5f4b7a6cc04e43398921421aef8b77a2",
// 纠错内容列表
"data": [
{
"content": "宁厦的好时机历案打算沈查"
}
]
}
报错I/O error while reading input message; nested exception is java.io.IOException: Stream closed
解决方案
1、创建新的数据传输对象,如ReviseDTO,将需要的参数合并放入一个DTO
【ReviseDTO】
@Data
public class ReviseDTO {
/** 稿件Id */
private String subjectId;
/** 纠错内容列表 */
private List<ReviseContent> data;
}
【Controller】
@PostMapping("/list")
public Result<List<ReviseInfo>> list(@RequestBody ReviseDTO reviseDTO){
return reviseAdaptor.list(reviseDTO);
}
2、使用Map<String, Object>接收多个参数
【Controller】
@PostMapping("/list")
public Result<List<ReviseInfo>> list(@RequestBody Map<String, Object> params){
return reviseAdaptor.list(params);
}
【Adaptor/serviceImpl】
import org.apache.commons.collections4.MapUtils;
String subjectId = MapUtils.getString(params, "subjectId");
List<ReviseContent> data = (List<ReviseInfo>)MapUtils.getObject(params, "data");
// List<ReviseInfo> data = (List<ReviseInfo>)params.get("data");