dud*_*nii 3 java rest spring controller response
在春季启动时发送休息响应的最佳方法是什么?另外我应该如何管理发送状态代码才能正确完成?
目前我使用ResponseEntity,但我怀疑这是最优雅的方式.
示例代码:
@PostMapping()
public ResponseEntity post(@Valid @RequestBody Item item, BindingResult bindingResult){
if (bindingResult.hasErrors()){
return new ResponseEntity<>(new ModelErrors(bindingResult), HttpStatus.BAD_REQUEST);
}
return new ResponseEntity<>(itemService.addItem(item), HttpStatus.CREATED);
}
Run Code Online (Sandbox Code Playgroud)
ModelErrors类扩展了HashMap类,只是获取并包装BindingResult的错误消息.
就个人而言,我认为返回将ResponseEntity是许多案件的最佳选择.在我看来,这样做的一个小更可读的方式是使用方便的状态方法上ResponseEntity这样
@PostMapping()
public ResponseEntity post(@Valid @RequestBody Item item, BindingResult bindingResult){
if (bindingResult.hasErrors()){
return ResponseEntity.badRequest().body(new ModelErrors(bindingResult));
}
return ResponseEntity.created().body(itemService.addItem(item));
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用status传递HttpStatus此类或状态代码的方法
ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ModelErrors(bindingResult));
ResponseEntity.status(201).body(itemService.addItem(item));
Run Code Online (Sandbox Code Playgroud)
另一种选择是在不使用的情况下返回您想要的任何类型ResponseEntity,但是这使您对响应的控制更少,并且要求您具有正确的MessageConverter配置(您可以在此处阅读).
一个简单的例子可能看起来像这样
@RequestMapping("/hotdog")
public Hotdog hotdog() {
return new Hotdog("mystery meat", "ketchup, mustard");
}
Run Code Online (Sandbox Code Playgroud)
如果一切都配置正确,你最终会得到这样的回应
{
"content": "mystery meat",
"condiments": "ketchup, mustard"
}
Run Code Online (Sandbox Code Playgroud)