Dan*_*ira 7 java sql spring spring-mvc
这是我的控制器:
@RestController
@RequestMapping("/reclamacao")
public class ClaimController {
@Autowired
private ClaimRepository claimRepository;
@CrossOrigin
@PostMapping("/adicionar")
public Claim toCreateClaim(@Valid @RequestBody Claim claim, @RequestBody List<Sector> sectors) {
if (claim.getNumber() != null) {
if (claimRepository.findByNumber(claim.getNumber()).isPresent()) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Já existe uma reclamação com esse número.");
}
}
claimRepository.save(claim);
for (Sector sect: sectors) {
claimRepository.saveClaim(claim.getId(), sect);
}
return claim;
}
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
"message": "读取输入消息时出现 I/O 错误;嵌套异常为 java.io.IOException: Stream closed"
Mac*_*eyo 15
您的错误是 @RequestBody 在您的控制器方法参数中被使用两次的结果。以下行导致问题:
toCreateClaim(@Valid @RequestBody Claim claim, @RequestBody List<Sector> sectors)
Run Code Online (Sandbox Code Playgroud)
您不能以这种方式使用它,因为每个方法只允许一个 @RequestBody。使用 @RequestBody Spring 将传入的请求正文转换为指定的对象(最后关闭表示正文的流),因此尝试在同一方法中第二次使用 @RequestBody 毫无意义,因为流已经关闭。
因此,为了解决您的问题,请使用您指定的两个对象创建一个专用对象。喜欢:
public class Complaint {
Claim claim;
List<Sector> sectors;
}
Run Code Online (Sandbox Code Playgroud)
然后将方法参数更改为:
toCreateClaim(@RequestBody Complaint complaint)
Run Code Online (Sandbox Code Playgroud)
此外,如果要使用 @Valid 验证对象的结构并使结果可访问,则需要在验证的参数之后添加 BindingResult :
toCreateClaim(@Valid @RequestBody Complaint complaint, BindingResult bindingResult)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14877 次 |
| 最近记录: |