2017-02-12 266 views
-1

我是WebServices的新手。我正在开发一个应用程序,在客户端使用AnhularJs1.x向Spring Rest Controller发送数据。415不支持的媒体类型(org.springframework.web.client.HttpClientErrorException)

该应用程序的体系结构是基于微服务的。我能够从角度接收来自同一战争中的前端休息控制器的数据。

从这个控制器我调用一个内部调用与数据库交互的另一个微服务的服务。

当我送我的前端控制器接收到另一个微服务的数据,我得到415不支持的媒体类型(org.springframework.web.client.HttpClientErrorException)

下面是我的前端控制器这是在相同的战争angularJS

@RequestMapping(value = "/servicearticles", method = RequestMethod.POST,  produces = MediaType.APPLICATION_JSON_VALUE) 
public ResponseEntity<ServiceArticle> saveData(@RequestBody  List<ServiceArticle> serviceArticleList){ 
    System.out.println("In savedata"); 
    System.out.println(serviceArticleList.toString()); 


    try { 
     if(null != serviceArticleList && serviceArticleList.size() >0){ 
      serviceArticleAdminService.insertData(serviceArticleList); 
     }else{ 
      logger.error("File is empty. No data to save"); 
     } 

我能够在这个位指示获取数据: [ServiceArticle [条款ArticleID = 17070,产品代码= 1000,产品名称=商业地块区域,区域= 1],ServiceArticle [ articleId = 17071,productCode = 1001,productName =业务包裹区域,区域= 4],ServiceArticle [articleId = 17070,productCode = 1012,productName =业务包裹区域,区域= 5],ServiceArticle [articleId = 17070,productCode = 1000,productName =业务包裹区域,区域= 1] ,ServiceArticle [条款ArticleID = 17070,产品代码= 1000,产品名称=商业地块区域,区域= 2]

当我打电话从我serviceImpl类不同的微服务,我得到了不支持的媒体类型的错误

代码serviceImpl class

private final String URI = "http://localhost:8082/admin/import/servicearticles"; 

@Override 
public void insertData(List<ServiceArticle> serviceArticles) { 
    logger.error("Inside insertData() in service"); 

    RestTemplate restTemplate = new RestTemplate(); 

    try { 
      restTemplate.postForObject(URI, serviceArticles, ServiceArticle.class); 
    } catch (ResourceAccessException e) { 
     logger.error("ServiceArticleAdmin Service Unavailable."); 

下面是映射到此呼叫的不同微服务器中控制器的代码

@RequestMapping(value = "/import/servicearticles", method = RequestMethod.POST, consumes= MediaType.APPLICATION_JSON_VALUE , produces = MediaType.APPLICATION_JSON_VALUE) 
public ResponseEntity<ServiceArticle> addAll(@RequestBody List<ServiceArticle> serviceArticles) { 

    List<ServiceArticle> serviceArticlesAdded = serviceArticleAdminService.addAll(serviceArticles); 

    return new ResponseEntity(serviceArticlesAdded, HttpStatus.OK); 
} 

我在我的pom.xml中添加下面的依赖

<dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
     <version>2.8.6</version> 
    </dependency> 

    <dependency> 
     <groupId>com.fasterxml.jackson.dataformat</groupId> 
     <artifactId>jackson-dataformat-xml</artifactId> 
     <version>2.8.6</version> 
    </dependency> 

我有我的servlet-context.xml的下面bean定义

<bean 
    class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 
    <property name="messageConverters"> 
     <list> 
      <ref bean="jsonMessageConverter" /> 
     </list> 
    </property> 
</bean> 

<!-- To convert JSON to Object and vice versa --> 
<bean id="jsonMessageConverter" 
    class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
</bean> 

请帮我找出我在哪里犯了一个错误。 有什么办法,我可以设置响应类型的应用程序/ JSON当我调用 restTemplate.postForObject方法

我使用REST客户端插件它验证了在那里工作,但不是通过我的Java代码。请帮忙。

回答

1

似乎“Content-Type:application/json”标题丢失。 您的方法也适用于文章列表,因此postForObject方法中的第三个参数不正确。

下面的代码应该做的工作:

HttpHeaders headers = new HttpHeaders(); 
headers.setContentType(MediaType.APPLICATION_JSON); 
HttpEntity<List<ServiceArticle>> request = new HttpEntity<>(serviceArticles, headers); 
restTemplate.exchange(URI, HttpMethod.POST, request, new ParameterizedTypeReference<List<ServiceArticle>>() { }); 
+0

谢谢你的答案@Eien,我试着用这个代码,我得到 org.springframework.web.client。HttpServerErrorException:500服务器错误 – AkashSharma

+0

500错误来自http:// localhost:8082/admin/import/servicearticles?在org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:94)\t \t在org.springframework: – Eien

+0

是当restTemplate.exchange()被调用映射到你提到 – AkashSharma

相关问题