gpt4 book ai didi

java - 415 不支持的媒体类型(org.springframework.web.client.HttpClientErrorException)

转载 作者:行者123 更新时间:2023-12-03 16:09:34 25 4
gpt4 key购买 nike

我是 Web 服务的新手。我正在开发一个应用程序,我在客户端使用 AnhularJs1.x 将数据发送到 Spring Rest Controller。

应用程序的架构是基于微服务的。我能够从 angular 接收数据到同一场 war 中的前端休息 Controller 。

我从这个 Controller 调用一个服务,该服务在内部调用另一个与数据库交互的微服务。

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

下面是我的前端 Controller ,它与 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");
}

我能够在此 Controller 中获取数据:
[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 , 区域=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.");

下面是映射到这个调用的不同微服务中 Controller 的代码
@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: application/json标题丢失。
您的方法还返回文章列表,而不是一篇文章,因此 postForObject 中的第三个参数方法不对。
以下代码应该可以完成这项工作:

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);

HttpEntity<List<ServiceArticle>> request = new HttpEntity<>(serviceArticles, headers);

ResponseEntity<List<ServiceArticle>> response =
restTemplate.exchange(URI, HttpMethod.POST, request,
new ParameterizedTypeReference<List<ServiceArticle>>() { });

关于java - 415 不支持的媒体类型(org.springframework.web.client.HttpClientErrorException),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42186774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com