获取org.springframework.web.client.HttpClientErrorException:415 Spring Rest Web服务的不受支持的媒体类型

时间:2018-12-15 12:25:38

标签: resttemplate spring-rest

获取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 {

        }

1 个答案:

答案 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

您尝试按该顺序执行两个步骤,并使用更新的代码来更新问题。