Как преобразовать тип MessageResponse в возвращаемый тип ResponseEntity<?>

У меня есть класс обслуживания, который имеет следующий метод

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<?>?

пожалуйста, предложите мне код, чтобы я мог решить эту проблему и заранее спасибо.

Что ваша спецификация API хочет, чтобы GET/orders возвращал? Что такое класс MessageResponse?

tgdavies 24.12.2020 12:16
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
400
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Попытался ли ты:

return new ResponseEntity<>(newCartService.order(carts), HttpStatus.OK);

или как предложено в комментариях:

return ResponseEntity.ok(newCartService.order(carts));

более современное написание: ResponseEntity<>.ok(...)

Tom Elias 24.12.2020 12:15

Кроме того, если вы хотите установить заголовок с объектом ответа, вы можете попробовать:

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));

Другие вопросы по теме