如何使用Spring异常处理正确的POST REST错误状态码
如何使用Spring异常处理正确的POST REST错误状态码
我正在尝试处理POST请求中缺失的JSON数据。
我的控制器类
@Controller @RequestMapping("/testMetrics") public class TestMetricsEndPoint extends StatusEndpointHandler implements RestEndPoint<TestMetrics,String> { @Autowired private ObjectMapper mapper; @Autowired private TestMetricsService testMetricsService; @Override public Status get(String id) { // TODO Auto-generated method stub return null; } @Override @RequestMapping(method = RequestMethod.POST,consumes = "application/json", produces = "application/json") public @ResponseBody Status create(@RequestBody TestMetrics core, BindingResult bindingResult) { try { if(bindingResult.hasErrors()){ throw new InvalidRequestException("Add failed, Please try again ", bindingResult); } if((core.getGroupName()==""||core.getGroupName()==null)&&(core.getTestName()==null||core.getTestName()=="")){ throw new MissingParametersException(HttpStatus.BAD_REQUEST.value(),"Please provide all necessary parameters"); } TestMetrics dataObject = testMetricsService.create(core); return response(HttpStatus.CREATED.value(),dataObject); }catch (MissingParametersException e) { return response(HttpStatus.BAD_REQUEST.value(),e.getLocalizedMessage()); } }
扩展类:
public class StatusEndpointHandler { public Status response(Integer statusCode,Object data){ Status status = new Status(); status.setData(data); status.setStatus(statusCode); return status; } }
实现的接口:
public interface RestEndPoint { Status get(ID id); Status create(T entity, BindingResult bindingResult);}
结果:
请注意高亮部分
因此,当我尝试通过POSTMAN测试结果时,状态为200 OK。 我不知道如何解决它。 请帮助我解决这种情况。 如何获取正确的状态代码?
admin 更改状态以发布 2023年5月21日
你应该把返回类型从 @ResponseBody
改为 ResponseEntity
,这样可以允许你修改响应头,从而设置状态码,以下是文档中的一段代码:
@RequestMapping("/handle") public ResponseEntityhandle() { URI location = ...; HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.setLocation(location); responseHeaders.set("MyResponseHeader", "MyValue"); return new ResponseEntity ("Hello World", responseHeaders, HttpStatus.CREATED); }