2017-02-12 12 views
-1

Я новичок в WebServices. Я работаю над приложением, где я использую AnhularJs1.x на стороне клиента, который отправляет данные в Spring Rest Controller.415 Неподдерживаемый тип носителя (org.springframework.web.client.HttpClientErrorException)

Архитектура приложения основана на микросервисах. Я могу получить данные от углового до контроллера останова, который находится в той же войне.

С этого контроллера я звоню в службу, которая внутренне вызывает другой микросервис, который взаимодействует с базой данных.

Когда я посылаю данные, полученные в моем переднем конце контроллера к другому микро-службе я получаю 415 Unsupported Media Type (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, ProductCode = 1000, ProductName = Parcel бизнеса-зона, зона = 1], ServiceArticle [ articleId = 17071, productCode = 1001, productName = Зона бизнес-зоны, зона = 4], Сервисная статья [articleId = 17070, productCode = 1012, productName = Бизнес-зона, зона = 5], Сервисная статья [articleId = 17070, productCode = 1000, productName = Business Parcel zone, zone = 1] , ServiceArticle [ArticleID = 17070, ProductCode = 1000, ProductName = Parcel бизнеса-зона, зона = 2]]

Когда я называю по-разное microservice из моего класса serviceImpl я получаю ошибку неподдерживаемого типа медиа

Кода для serviceImpl класс

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> 

У меня есть следующее определение бина в моем сервлет-context.xml

<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/servicesarticles? – Eien

+0

Да оно приходит, когда restTemplate.exchange() вызывается, который сопоставляется с URI вы упомянули – AkashSharma