Qual é a diferença entre ResponseEntity <T> e @ResponseBody?

Eu tenho um manipulador simples no meu controlador que retorna uma mensagem

@RequestMapping(value = "/message")
@ResponseBody
public Message get() {
    return new Message(penguinCounter.incrementAndGet() + " penguin!");
}

Ao mesmo tempo, eu posso usar algo como isto

@RequestMapping(value = "/message")
ResponseEntity<Message> get() {
    Message message = new Message(penguinCounter.incrementAndGet() + " penguin!");
    return new ResponseEntity<Message>(message, HttpStatus.OK);
}

Qual a diferença entre essas duas abordagens? Não vamos levar em consideração o HttpStatus :)

questionAnswers(1)

yourAnswerToTheQuestion