获取Spring Rest控制器Web服务的以下异常:-
org.springframework.web.client.HttpClientErrorException:415不支持的媒体类型 在org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91) 在org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:667)
代码:
public class PaymentProcessController {
@RequestMapping(value = "/payment_failure", method = RequestMethod.POST)
public ModelAndView savePayFailure(HttpServletRequest request, HttpServletResponse response, HttpSession session)
{
RestTemplate restTemplate = new RestTemplate();
Invoice invoice = restTemplate.getForObject(
"http://localhost:8080/rooftop/invoice/findByProperty/TRANASACTION_NO/" + tx
nid, Invoice.class);
}
REST客户端使用InvoiceRestController编写,如下所示:
InvoiceRestController:
@RestController @RequestMapping(value = "/invoice/")
public class
InvoiceRestController { @RequestMapping(value =
"/findByProperty/{property}/{value}", method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE, consumes =
MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Invoice> findByProperty(@PathVariable String property, @PathVariable String value) throws Exception {
}
答案 0 :(得分:0)
这个问题很大程度上取决于您的设置,因此我想无法提供一个通用的答案。只有调试问题的步骤。
1。。首先请确保Http消息转换器就位,即,类路径中包括杰克逊之类的库;如果包含库,请确保jar未被损坏。有时,这就是您得到错误的原因。
该库自动包含在Spring Boot中。
如果不使用任何框架,则可能需要执行类似this
的操作 2。。其次,当您从savePayFailure
进行休息呼叫时,请确保设置并传递适当的内容协商标头,例如Accept
和{{1} Content-Type
中的}。
您的rest api非常清楚,因为它消耗了什么和产生了什么,但是在进行api调用时,您没有设置任何此类期望。由于这是您的自定义客户端,因此您需要进行设置以转换消息和标题。
How to set an “Accept:” header on Spring RestTemplate request?
HTTP get with headers using RestTemplate
Add my custom http header to Spring RestTemplate request / extend RestTemplate
您尝试按该顺序执行两个步骤,并使用更新的代码来更新问题。