当前位置: 首页 > 知识库问答 >
问题:

Spring Boot REST API不支持的媒体类型

缪征
2023-03-14

我有两个API:s,端口8080上的CarRental API和端口8081上的CarRental CRUD。

CarRade-CRUD使用JpaRepository访问h2内存DB。

我想使用CarRental API,使用webclient向CarRental CRUD发出请求。

在CarRental CRUD中,我可以使用此服务发出post请求并将车辆添加到db中:

public String addCar(Car car) {
    
    carRepository.save(car);
    
    return loggerService.writeLoggerMsg("CREATED CAR AND ADDED TO DB");
}

然后在控制器中:

@RestController
@RequestMapping("/crud/v1")
public class AdminCarController {

    @Autowired
    private AdminCarService adminCarService;
    
    @PostMapping(path = "/addcar",  consumes = "application/json")
    public String addCar(@RequestBody Car car) {
        return adminCarService.addCar(car);
    }
}

我试图在CarRental API中发布一个webclient请求:

@Service
public class AdminCarService {

    @Autowired 
    LoggerService loggerService;
    
    @Autowired
    private WebClient.Builder webClientBuilder;

    public String  addCar(Car car) {

            webClientBuilder
                    .build()
                    .post()
                    .uri("localhost:8081/crud/v1/addcar")
                    .retrieve()
                    .bodyToFlux(Car.class);

        return loggerService.writeLoggerMsg("ADDED CAR TO DB");
        }
}

然而,使用carRental API,当我尝试发布请求时,我在postman中遇到以下错误:

 "status": 500,
"error": "Internal Server Error",
"trace": "org.springframework.web.reactive.function.client.WebClientResponseException: 200 OK from POST localhost:8081/crud/v1/addcar; nested exception is org.springframework.web.reactive.function.UnsupportedMediaTypeException: Content type 'text/plain;charset=UTF-8' not supported for bodyType=com.backend.carrentalapi.entity.Car\n\tat 

这是汽车实体:

@Getter
@Setter
@RequiredArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "TBL_CAR")
public class Car {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long carId;

    @Column(name = "NAME")
    private String carName;

    @Column(name = "MODEL")
    private String carModel;

    @Column(name = "DAILY_PRICE")
    private double dailyPrice;


}

我似乎找不到我在代码中生成文本/纯文本的位置。我在postman中确保我发布了一个原始JSON正文请求,标题上写着内容类型:application/JSON。

共有1个答案

陶锋
2023-03-14

在您的WebClient中,您没有添加请求主体,而是希望调用的API返回Car(该API返回一个简单的String)。以下几点应该有用。

@Service
public class AdminCarService {

    @Autowired 
    LoggerService loggerService;
    
    @Autowired
    private WebClient.Builder webClientBuilder;

    public String  addCar(Car car) {

            webClientBuilder
                    .build()
                    .post()
                    .uri("localhost:8081/crud/v1/addcar")
                    .body(BodyInserters.fromValue(car))
                    .retrieve()
                    .toBodilessEntity();

        return loggerService.writeLoggerMsg("ADDED CAR TO DB");
        }
}

使用. toBodiessEntity(),因为您实际上并不对响应做任何事情。

 类似资料:
  • 问题内容: 自数小时以来,我一直在尝试纠正http错误,但它仍显示不支持的页面。我在邮递员中添加标题。 这是我的Java代码 这是我的档案 问题答案: 通过和如何在响应流和请求流之间对对象进行序列化和反序列化。 将会发生的是,将从提供者的注册表中进行搜索,以查找可以处理的媒体类型。如果找不到,则Jersey无法处理该请求,并将发送415不支持的媒体类型。通常,你还应该在服务器端记录一个异常。不知道

  • 我已经创建了一个示例web服务来进行post调用。 我使用的是Jersey JAX-RS和Maven。

  • 我正在用Spring Boot构建一些API,但是当我试图用Postman查询时,我得到了一些关于Content-Type的错误。 我不明白哪里出了问题。 我注意到错误消失时,我删除了@刚体作为参数的方法。为什么啊? 我只想: 将XML发送到API

  • 问题内容: 我正在尝试使用jQuery 1.6(Jackson 2.1.1 和Spring 3.2.0 )通过JSON通过该方法向数据库中插入和/或更新数据。 JS代码如下。 通过URL映射的Spring控制器内部的方法如下。 服务器按照问题的含义进行响应, 415不支持的媒体类型 标头信息如下所示。 整个文件如下。 当我删除一个方法参数并仅用于接受请求参数时,它可以工作。 问题答案: 浏览器发送

  • 问题内容: 我正在使用Spring 3.2,并尝试使用ajax发布请求来提交json对象数组。如果相关,我转义了所有特殊字符。 我的HTTP状态为415。 我的控制器是: jQuery是: 我发布的数组中的对象之一的示例是以下json: 错误是: 为什么会发生此错误-有人知道吗? 问题答案: 您可以尝试使用。它没有任何问题

  • 我试图使用BlueJeans API来创建一个客户端应用程序,https://github.com/bluejeans/api-rest-meetings/blob/master/libs/python/docs/ApplicationApi.md#create_client_application.我已经获得了一个客户端ID和秘密以及用户ID,并将它们保存在我的Django设置中。我还编写了一个

  • 我有一个问题,当我需要插入用户到Keycloak时,我出现了以下错误: 消息:“http failure response for http://localhost:8080/auth/admin/realms/demo/clients:415 Unsupported Media type”名称:“httperrorresponse”确定:false状态:415 statusText:“Unsup