2017-04-03 5 views
2

Spring Restful webservice를 사용하려고합니다.Spring RestTemplate 415 지원되지 않는 미디어 유형

두 개의 이클립스에서 두 개의 프로젝트를 만들었습니다. 한 프로젝트에서 나는 RestClient 프로그램을 작성했고 다른 프로젝트에서 나는 webservice를 작성하고 tomcat을 통해 webservice를 쳐다 보았다. 클라이언트와 서버 간의 json 통신으로 java bean을 전달하려고합니다.

하지만 예외가 있습니다.

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; 
    } 

트랙 클래스 : 또한 내가

restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); 
restTemplate.getMessageConverters().add(new StringHttpMessageConverter()); 
과 노력

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 + "]"; 
    } 
} 

서블릿 XML의 줄 아래에 추가 : 다음과 같이

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에 헤더를 지정하는 대신 "consumes"를 사용할 수 있습니다. @RequestMapping (value = "/ test", method = RequestMethod.POST, 소모 = MediaType .APPLICATION_JSON_VALUE) –

+0

이 URL에서 답을 시도했지만 성공하지 못했습니다. – Easy2DownVoteHard2Ans

+0

죄송합니다. consumes = MediaType.APPLICATION_JSON_VALUE를 사용했습니다. 그러나 같은 문제. 종속성 병 파일과 관련된 문제가 있습니까? – Easy2DownVoteHard2Ans

답변

2

그리고

마지막으로 그것은 변경으로 노력하고 있습니다.

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

추가 잭슨 코어-2.5.0 클래스 경로에 & 잭슨 - 주석 - 2.5.0 단지를 추가했다.

관련 문제