【发布时间】:2015-12-28 02:27:20
【问题描述】:
我正在尝试使用 Spring Boot 构建微服务。
我有一个后端 API,它接收 ResponseEntity POST 请求并处理它(保存到数据库等)。其中Data是自建类的Object。
现在我有一个顶级 API(处理身份验证,..)。最终用户将通过这个顶级 API 与后端服务进行通信。所以这个 API 基本上只需要将所有请求转发到正确的后端 api。
在这个顶级 API 中,我不想包含我的所有类(例如本例中的 Data 类),我宁愿将其作为 String json 数据或其他内容发送。所以我尝试了这个:
@RequestMapping(method = RequestMethod.POST, value="/data")
ResponseEntity<String> createUnit(@RequestBody String data) {
URI uri = util.getServiceUrl("dataservice");
String url = uri.toString() + "/data";
ResponseEntity<String> result = restTemplate.postForEntity(url, data, String.class);
return new ResponseEntity<String>(result.getBody(), HttpStatus.OK);
}
但这会导致org.springframework.web.client.HttpClientErrorException: 415 Unsupported Media Type。
所以我的问题是,有没有一种方法可以将这些请求转发到我的后端,而无需在我的 API 中包含我的所有 Object 类?我认为这应该可以,因为这与网络浏览器以 json 格式发送请求而不知道数据实际是什么类型的对象时相同。
后端处理如下:
@RequestMapping(method = RequestMethod.POST, value="/data")
ResponseEntity<Data> saveData(@RequestBody Data data) {
//Some code that processes the data
return new ResponseEntity<Data>(dataProcessed, HttpStatus.OK);
}
【问题讨论】:
-
您不需要返回
ResponseEntity<Data>。直接使用数据。这会将数据序列化为 Json。如果需要,您可以使用 Jackson 转换器。如果需要通用返回类型,请使用基类作为返回类型 -
@ViswanathLekshmanan 底层 API 也会发送匹配的
HttpStatus代码,例如404未找到 Data 对象,或204成功删除等。确定 HttpStatus 代码的逻辑与这些底层 API 一起使用,不应发生在顶层。这就是我使用ResponseEntity发送数据的原因
标签: java spring rest spring-boot microservices