我有兩個 API:s ,埠 8080 上的 CarRental-API 和埠 8081 上的 CarRental-CRUD。
CarRental-CRUD 使用 JpaRepository 訪問 h2 記憶體資料庫。
我想使用 CarRental-API 向 CarRental-CRUD 發出請求,使用 webclient。
在 CarRental-CRUD 中,我可以使用此服務發出發布請求并將汽車添加到資料庫中:
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 時,當我嘗試發布請求時,我在郵遞員中收到此錯誤:
"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;
}
我似乎無法在代碼中找到我生成文本/純文本的位置。我在郵遞員那里確保我正在發布一個原始的 JSON 正文請求,并且標題顯示內容型別:application/json。
uj5u.com熱心網友回復:
在您中,WebClient您沒有添加請求正文,而是期望Car從您正在呼叫的 API 回傳(并且此 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");
}
}
使用,.toBodilessEntity()因為您實際上并沒有對回應做任何事情。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/354967.html
標籤:爪哇 json 弹簧靴 邮差 spring-webclient
