【发布时间】:2019-05-28 17:02:09
【问题描述】:
我们有一个带有 POST 映射的 rest 控制器 API,它将一个对象作为请求参数并在 DB 上创建它。我们对输入对象的验证很少,如果有任何错误,那么我们会抛出异常并带有自定义消息。
如果我们从 post man 调用此 API,我们会看到相应的错误。
而当我们在其他应用程序的调用者方法中使用 Spring 的 RestTemplate 调用它时,我们看到的只是一个 400 Bad request 和空主体。没有看到错误消息。
这可能是什么问题。我们如何获取 API 抛出的自定义消息。
这是我们如何使用 rest 模板调用 API。
String url = "https://localhost:8895/servuceUrl";
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity<AddRequest> entity = new HttpEntity<AddRequest>(obj, headers);
ResponseEntity<String> data = null;
adddata = restTemplate.exchange(syncurl, HttpMethod.POST, entity, String.class);
在服务器端我们有一个异常写成
@ResponseStatus(value=HttpStatus.BAD_REQUEST)
public class InvalidDataException extends Exception {
public InvalidDataException(String msg) {
super(msg);
}
}
控制器的样子
@PostMapping(RestUriMappings.POST_MAPPING)
public ResponseDto add(@Valid @RequestBody AddRequest data) throws InvalidDataException
{
logger.debug("Incoming data for add: {}", data.toString());
// validate the payload
if(data.getName()==null)
throw new InvalidDataException("Name shouldnt be null");
}
【问题讨论】:
-
你试过调用 String body = data.getBody() 吗?身体还是空的吗?
-
你在POSTMAN中是否也设置了相同的媒体类型标头?
标签: java spring spring-boot resttemplate