我正在尝试让 @RestController
接受 @PathVariable
以 JSON 格式返回特定对象以及正确的状态代码。到目前为止,代码的方式是返回 JSON 格式的对象,因为它默认使用 Spring 4 内置的 Jackson 库。
但是我不知道如何制作它,所以它会向用户发送一条消息,说我们想要一个 api 变量,然后是 JSON 数据,然后是错误代码(或成功代码,取决于一切是否顺利)。示例输出为:
Please enter api value as parameter (NOTE this can be in JSON as well if needed)
{"id": 2, "api": "3000105000" ... } (NOTE this will be the JSON response object)
Status Code 400 (OR proper status code)
带参数的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;
}
}
}
最佳答案
一个 @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
中的方法带注释的类。
关于java - 如何在返回对象的 Spring MVC @RestController @ResponseBody 类中响应 HTTP 状态代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26134331/