如何使用响应实体从我的 REST 调用返回简单的错误消息?



我有一个用Java和Spring MVC编写的Web应用程序。

有一个 REST Web 服务,当它工作时,我会以 JSON 格式取回Employee

但是在出现错误的地方,我会返回一个大的 JSON 字符串,其中包含一个不包含我的 sErrorMsg 字符串的 HTML 错误页面(下面包含错误 JSON 的示例(。

问:如何使错误响应成为包含错误消息的简单 JSON 字符串?

@RequestMapping(value = "/json/employee/{employeeId}", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<Employee> getEmployee(@PathVariable("employeeId") int employeeId) throws Exception {
Employee employee = null;
String sErrorMsg = "";
try {
employee = employeeService.getEmployee(employeeId);
} catch (Exception x) {
sErrorMsg = "Error getting employee; "+x.getMessage();
// UPDATE:
// throw x; <<-- errant line here was causing the problem
//
}
ResponseEntity responseEntity = null;
if (ret != null) {
ResponseEntity responseEntity = ResponseEntity.ok(employee);
} else {
responseEntity = ResponseEntity.badRequest().body(sErrorMsg);
}
return responseEntity;
}

错误 JSON ...

{"readyState":4,"responseText":"<!doctype html><html lang="en"><head><title>HTTP Status 500 – Internal Server Error</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line /* the rest of the HTML which contains a length Java stack trace ... */ }

我自己用一个错误的throw x引起了问题......

} catch (Exception x) {
sErrorMsg = "Error getting employee; "+x.getMessage();
throw x; // <<-- errant line here was causing the problem
}

我删除了throw x;,一切正常。

我做了这样的事情:

@GetMapping("/get/findByTsId")
public ResponseEntity<JsonPayLoad> findByTsId(String id) throws JsonProcessingException{
try{
JsonPayLoad payload =  this.splunkService.findByTsId(id);
log.info("search request for TsId t {} received at ->>> {}",id, LocalDateTime.now());
log.info("match found n {}",  payload.toString());
return  ResponseEntity.ok(payload);
} catch(NullPointerException nullPointerException){
ObjectMapper mapper = new ObjectMapper();
String message = "{"result": "no match found for id: " + id+ ""}";
JsonPayLoad jsonPayLoad = new JsonPayLoad() ;
JsonNode messageValue = mapper.readTree(message);
jsonPayLoad.setPayload(messageValue);
jsonPayLoad.setTimeStamp((LocalDateTime.now()).toString());

log.info("search request for TsId t {} received at ->>> {}",id, LocalDateTime.now());
log.info("no match found n {}",  jsonPayLoad);
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(jsonPayLoad);
}
}

最新更新