К сожалению, я получаю следующую ошибку, когда пытаюсь сделать запрос GET к URL-адресу http://localhost:8222/api/v1/products несмотря на настройку конечных точек:
Код: Выделить всё
{
"timestamp": 1436442596410,
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/api/v1/products"
}
ProductController.java:
Код: Выделить всё
@RestController
@RequestMapping("/api/v1/products")
@RequiredArgsConstructor
public class ProductController {
private final ProductService service;
@PostMapping
public ResponseEntity createProduct(
@RequestBody @Valid ProductRequest request
) {
return ResponseEntity.ok(service.createProduct(request));
}
@PostMapping("/purchase")
public ResponseEntity purchaseProducts(
@RequestBody List request
) {
return ResponseEntity.ok(service.purchaseProducts(request));
}
@GetMapping("/{product-id}")
public ResponseEntity findById(
@PathVariable("product-id") Integer productId
) {
return ResponseEntity.ok(service.findById(productId));
}
@GetMapping
public ResponseEntity findAll() {
return ResponseEntity.ok(service.findAll());
}
}
Код: Выделить всё
@Service
@RequiredArgsConstructor
public class ProductService {
private final ProductRepository repository;
private final ProductMapper mapper;
public Integer createProduct(
ProductRequest request
) {
var product = mapper.toProduct(request);
return repository.save(product).getId();
}
public ProductResponse findById(Integer id) {
return repository.findById(id)
.map(mapper::toProductResponse)
.orElseThrow(() -> new EntityNotFoundException("Product not found with ID:: " + id));
}
public List
findAll() {
return repository.findAll()
.stream()
.map(mapper::toProductResponse)
.collect(Collectors.toList());
}
@Transactional(rollbackFor = ProductPurchaseException.class)
public List purchaseProducts(
List request
) {
var productIds = request
.stream()
.map(ProductPurchaseRequest::productId)
.toList();
var storedProducts = repository.findAllByIdInOrderById(productIds);
if (productIds.size() != storedProducts.size()) {
throw new ProductPurchaseException("One or more products does not exist");
}
var sortedRequest = request
.stream()
.sorted(Comparator.comparing(ProductPurchaseRequest::productId))
.toList();
var purchasedProducts = new ArrayList();
for (int i = 0; i < storedProducts.size(); i++) {
var product = storedProducts.get(i);
var productRequest = sortedRequest.get(i);
if (product.getAvailableQuantity() < productRequest.quantity()) {
throw new ProductPurchaseException("Insufficient stock quantity for product with ID:: " + productRequest.productId());
}
var newAvailableQuantity = product.getAvailableQuantity() - productRequest.quantity();
product.setAvailableQuantity(newAvailableQuantity);
repository.save(product);
purchasedProducts.add(mapper.toproductPurchaseResponse(product, productRequest.quantity()));
}
return purchasedProducts;
}
}
Код: Выделить всё
@SpringBootApplication
public class ProductApplication {
public static void main(String[] args) {
SpringApplication.run(ProductApplication.class, args);
}
}
Вот файл Gateway-service.yml. файл:
Код: Выделить всё
server:
port: 8222
spring:
cloud:
gateway:
discovery:
locator:
enabled: true
routes:
- id: product-service
uri: lb:http://PRODUCT-SERVICE
predicates:
- Path=/api/v1/products/**
Код: Выделить всё
server:
port: 8050
spring:
datasource:
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://localhost:5432/product
username: XXX
password: XXX
jpa:
hibernate:
ddl-auto: validate
database: postgresql
database-platform: org.hibernate.dialect.PostgreSQLDialect
flyway:
baseline-on-migrate: true
enabled: true
baseline-description: "init"
baseline-version: 0
user: ${spring.datasource.username}
password: ${spring.datasource.password}
Код: Выделить всё
eureka:
instance:
hostname: localhost
client:
service-url:
defaultZone: http://localhost:8761/eureka
name:
value: XXX
spring:
cloud:
config:
override-system-properties: false
management:
tracing:
sampling:
probability: 1.0
Я подтвердил, что все микросервисы развернуты на сервере Eureka в порту 8761:

Я тоже в значительной степени На 100% уверен, что ни в моей файловой иерархии, ни в любом из моих файлов pom.xml нет ошибок.
Я также подтвердил, что приложение Spring Boot может подключаться к моей базе данных postgresSQL, как я смог вставить туда некоторые данные с помощью Flyway.
Я был бы признателен за любую помощь относительно того, почему я получаю ошибку 404 при выполнении запроса GET. Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/787 ... t-endpoint