我是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>>() { });

08-08 07:36