我对WebServices还不熟悉。我正在开发一个应用程序,客户端使用AnhularJs1.x将数据发送到Spring Rest Controller。
该应用程序的架构是基于微服务的。我能够从Angular接收数据到前端Rest控制器,它们在同一个war中。
从这个控制器中,我调用了一个服务,该服务内部调用了另一个与数据库交互的微服务。
当我将前端控制器中收到的数据发送到另一个微服务时,我收到了"415 Unsupported Media Type (org.springframework.web.client.HttpClientErrorException)"的错误。
以下是我的前端控制器,它与AngularJS在同一个war中:
以下是不同微服务中映射到此调用的控制器代码
请帮我找出我的错误所在。 当我调用restTemplate.postForObject方法时,是否有办法将响应类型设置为application/json? 我使用REST客户端插件进行验证,它在那里可以工作,但在我的Java代码中不行。请帮忙。
该应用程序的架构是基于微服务的。我能够从Angular接收数据到前端Rest控制器,它们在同一个war中。
从这个控制器中,我调用了一个服务,该服务内部调用了另一个与数据库交互的微服务。
当我将前端控制器中收到的数据发送到另一个微服务时,我收到了"415 Unsupported Media Type (org.springframework.web.client.HttpClientErrorException)"的错误。
以下是我的前端控制器,它与AngularJS在同一个war中:
@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=Business Parcel zone , zone=1], ServiceArticle [articleId=17071, productCode=1001, productName=Business Parcel zone , zone=4], ServiceArticle [articleId=17070, productCode=1012, productName=Business Parcel zone , zone=5], ServiceArticle [articleId=17070, productCode=1000, productName=Business Parcel zone , zone=1], ServiceArticle [articleId=17070, productCode=1000, productName=Business Parcel zone , zone=2]]
当我从我的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>
我在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>
请帮我找出我的错误所在。 当我调用restTemplate.postForObject方法时,是否有办法将响应类型设置为application/json? 我使用REST客户端插件进行验证,它在那里可以工作,但在我的Java代码中不行。请帮忙。
@RequestMapping(value = "/import/servicearticles", method = RequestMethod.POST, consumes= MediaType.APPLICATION_JSON_VALUE , produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity addAll(@RequestBody List serviceArticles) {
List serviceArticlesAdded = serviceArticleAdminService.addAll(serviceArticles);
return new ResponseEntity(serviceArticlesAdded, HttpStatus.OK);
}
- AkashSharma