gpt4 book ai didi

java - 如何使用 Spring 异常处理 POST REST 正确的错误状态代码

转载 作者:行者123 更新时间:2023-12-02 03:28:53 27 4
gpt4 key购买 nike

我正在尝试处理 POST 请求中丢失的 json 数据。我的 Controller 类

@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;
}

}

实现的接口(interface):

 public interface RestEndPoint<T extends SynRestBaseJSON, ID extends    Serializable> {

Status get(ID id);

Status create(T entity, BindingResult bindingResult);}

结果: enter image description here

请查看突出显示的部分因此,当我尝试通过 POSTMAN 测试结果时,我得到的状态为 200 OK。我不知道如何解决它。请帮助我解决这种情况。如何获取正确的状态码?

最佳答案

您应该将返回类型从 @ResponseBody 更改为 ResponseEntity这将允许您操作 header ,从而设置状态,这是文档中的片段

 @RequestMapping("/handle")
public ResponseEntity<String> handle() {
URI location = ...;
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.setLocation(location);
responseHeaders.set("MyResponseHeader", "MyValue");
return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED);
}

关于java - 如何使用 Spring 异常处理 POST REST 正确的错误状态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38388069/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com