Spring MVC @RestController @ResponseBody类中如何使用HTTP状态代码响应以返回对象?
问题内容:
我想有一个@RestController
,这需要@PathVariable
以JSON格式返回一个特定的对象,适当的状态代码一起。到目前为止,代码是正确的,它将以JSON格式返回该对象,因为默认情况下它使用的是Jackson库中内置的Spring
4。
但是我不知道如何做到这一点,所以它将向用户显示一条消息,说我们需要一个api变量,然后是JSON数据,然后是错误代码(或者是否成功,取决于是否一切正常)。输出示例如下:
请输入api值作为参数(注意,如果需要,也可以使用JSON)
{“ id”:2,“ api”:“ 3000105000” …}(注意,这将是JSON响应对象)
状态码400(或正确的状态码)
具有参数的url看起来像这样
http://localhost:8080/gotech/api/v1/api/3000105000
我到目前为止的代码:
@RestController
@RequestMapping(value = "/api/v1")
public class ClientFetchWellDataController {
@Autowired
private OngardWellService ongardWellService;
@RequestMapping(value = "/wells/{apiValue}", method = RequestMethod.GET)
@ResponseBody
public OngardWell fetchWellData(@PathVariable String apiValue){
try{
OngardWell ongardWell = new OngardWell();
ongardWell = ongardWellService.fetchOneByApi(apiValue);
return ongardWell;
}catch(Exception ex){
String errorMessage;
errorMessage = ex + " <== error";
return null;
}
}
}
问题答案:
A
@RestController
不适合这样做。如果您需要返回不同类型的响应,请使用ResponseEntity<?>
,您可以在其中显式设置状态代码。
的body
的ResponseEntity
处理方式与任何带@ResponseBody
注释方法的返回值相同。
@RequestMapping(value = "/wells/{apiValue}", method = RequestMethod.GET)
public ResponseEntity<?> fetchWellData(@PathVariable String apiValue){
try{
OngardWell ongardWell = new OngardWell();
ongardWell = ongardWellService.fetchOneByApi(apiValue);
return new ResponseEntity<>(ongardWell, HttpStatus.OK);
}catch(Exception ex){
String errorMessage;
errorMessage = ex + " <== error";
return new ResponseEntity<>(errorMessage, HttpStatus.BAD_REQUEST);
}
}
请注意,您无需在带注释的类中@ResponseBody
使用@RequestMapping
方法@RestController
。