我是WebServices的新手。我正在开发一个在客户端使用AnhularJs1.x并将数据发送到Spring Rest Controller的应用程序。
该应用程序的体系结构基于微服务。我可以从角度相同的战场上的角度数据到前端休息控制器接收数据。
我从该控制器调用一个服务,该服务内部调用另一个与数据库交互的微服务。
当我将前端控制器中接收的数据发送到另一个微服务时,我得到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");
}
我可以在此contoller中获取数据:
[ServiceArticle [articleId = 17070,productCode = 1000,productName = Business Parcel区域,区域= 1],ServiceArticle [articleId = 17071,productCode = 1001,productName = Business Parcel区域,区域= 4],ServiceArticle [articleId = 17070,productCode = 1012,productName = Business Parcel区域,区域= 5],ServiceArticle [articleId = 17070,productCode = 1000,productName = Business Parcel区域,区域= 1],ServiceArticle [articleId = 17070,productCode = 1000,productName = Business Parcel区域,区域= 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>
请帮助我弄清楚我在哪里出错。
有什么办法可以在我调用时将响应类型设置为application / json
restTemplate.postForObject方法
我使用REST客户端插件验证了该插件是否可以在其中运行,但无法通过我的Java代码运行。请帮忙。
最佳答案
似乎缺少“ Content-Type:应用程序/ 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>>() { });