2017-04-03 246 views
2

我正在嘗試使用Spring Restful webservice。Spring RestTemplate 415 Unsupported Media Type

我在兩次日食中創建了兩個項目。在一個項目中,我編寫了RestClient程序,在另一個項目中我編寫了webservice,並通過tomcat盯住web服務。我試圖通過java bean作爲客戶端和服務器之間的json通信。

但我得到了異常。

org.springframework.web.client.HttpClientErrorException: 415 Unsupported Media Type 

我嘗試過很多方法,但都不成功。以下是我的代碼片段。

客戶方法:

private static void postTrack() { 
     try { 
      final String uri = "http://localhost:8181/RestWS/test"; 

      Track track = new Track(); 
      track.setTitle("Singer"); 
      track.setSinger("Shas"); 

      RestTemplate restTemplate = new RestTemplate(); 

      Track responseTrack = restTemplate.postForObject(uri, track, Track.class); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

服務方法:

@RequestMapping(value = "/test", method = RequestMethod.POST, headers = "Accept=application/json") 
    public @ResponseBody Track testMethod(@RequestBody Track track) { 
     System.out.println(" Inside Test Method : "); 
     System.out.println(" In GreetingController.greeting() "+track.getSinger()); 
     return track; 
    } 

跟蹤類別:

public class Track { 

    String title; 
    String singer; 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 

    public String getSinger() { 
     return singer; 
    } 

    public void setSinger(String singer) { 
     this.singer = singer; 
    } 

    @Override 
    public String toString() { 
     return "Track [title=" + title + ", singer=" + singer + "]"; 
    } 
} 

此外,我試圖與

restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); 
restTemplate.getMessageConverters().add(new StringHttpMessageConverter()); 

而且

MultiValueMap<String, String> header = new LinkedMultiValueMap<String, String>(); 
header.add("Content-Type", "application/json");   
HttpEntity<Object> httpEntity = new HttpEntity<Object>(track, header); 
ResponseEntity<Track> response = restTemplate.exchange(uri, HttpMethod.POST, httpEntity, Track.class); 
+0

看看這個答案。 http://stackoverflow.com/questions/4075991/post-request-via-resttemplate-in-json 另外,你可以使用「消費」,而不是在你的休息api中指定標題。例如: @RequestMapping(value =「/ test」,method = RequestMethod.POST,consumes = MediaType .APPLICATION_JSON_VALUE) –

+0

我試過了這個URL的答案,但是沒有成功。 – Easy2DownVoteHard2Ans

+0

對不起,我用了consumes = MediaType.APPLICATION_JSON_VALUE。但同樣的問題。有與依賴jar文件相關的問題嗎? – Easy2DownVoteHard2Ans

回答

2

最後,它是由所做的更改工作如下:

添加下面的servlet XML行。

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
    <property name="messageConverters"> 
     <list> 
      <ref bean="jsonConverter" /> 
     </list> 
    </property> 
</bean> 

<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
    <property name="supportedMediaTypes" value="application/json" /> 
</bean> 

ADD相加傑克遜核心-2.5.0 &傑克遜的註解-2.5.0罐子在classpath中。

相關問題