У меня есть класс обслуживания, который имеет следующий метод
NewCartService.java:
@Service
public class NewCartService {
@Autowired
private LoginRepository loginRepository;
@Autowired
private ProductRepository productRepository;
@Autowired
private CartRepository cartRepository;
@Autowired
private CartDao cartDao;
@Autowired
private Mailer mailService;
public MessageResponse order(List<Cart> cart) throws MessagingException {
for (Cart cart1 : cart) {
String userName = cart1.getUserName();
String password = cart1.getPassword();
String productName = cart1.getProductName();
String price = cart1.getPrice();
String discription = cart1.getDiscription();
if (!cartRepository.existsAllByUserNameAndPasswordAndProductNameAndPriceAndDiscription(userName, password, productName, price, discription)) {
throw new ResourceNotFoundException("not found");
}
MustacheFactory mf = new DefaultMustacheFactory();
Mustache m = mf.compile("cart.mustache");
StringWriter writer = new StringWriter();
String messageText = "";
List<Cart> carts = cartDao.getCart(cart);
Map<String, Object> params = new HashMap<>();
params.put("carts", carts);
Writer m1 = m.execute(writer, params);
System.out.println(m1);
messageText = m1.toString();
mailService.sendMail("/*email address*/", "/*email address*/", messageText, "demo", true);
cartRepository.deleteByUserNameAndPasswordAndProductNameAndPriceAndDiscription(userName, password, productName, price, discription);
return new MessageResponse("product Successfully ordered from cart");
}
throw new BadArgumentsException("bad arguments");
}
}
у меня есть контроллер
Картконтроллер.java:
@RestController
public class CartController {
@Autowired
public CartService cartService;
@GetMapping("/orders")
public ResponseEntity<?> orders(@Valid @RequestBody List<Cart> carts) throws MessagingException {
return newCartService.order(carts);// it gives error because i need to convert MessageResponse into the ResponseEntity<?>
}
}
Теперь мой вопрос заключается в том, как я могу преобразовать эти MessageResponse в ResponseEntity<?>?
пожалуйста, предложите мне код, чтобы я мог решить эту проблему и заранее спасибо.
Попытался ли ты:
return new ResponseEntity<>(newCartService.order(carts), HttpStatus.OK);
или как предложено в комментариях:
return ResponseEntity.ok(newCartService.order(carts));
более современное написание: ResponseEntity<>.ok(...)
Кроме того, если вы хотите установить заголовок с объектом ответа, вы можете попробовать:
HttpHeaders headers = new HttpHeaders();
headers.add("Custom-Header", "<header>");
return new ResponseEntity<>(newCartService.order(carts), headers, HttpStatus.OK);
альтернатива, которую вы можете использовать:
return ResponseEntity.ok()
.header("Custom-Header", "<header>")
.body(newCartService.order(carts));
Что ваша спецификация API хочет, чтобы GET/orders возвращал? Что такое класс MessageResponse?