¿Cuál es la diferencia entre ResponseEntity <T> y @ResponseBody?

Tengo un controlador simple en mi controlador que devuelve un mensaje

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

Al mismo tiempo puedo usar algo como esto

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

¿Cuál es la diferencia entre estos dos enfoques? No tomemos en cuenta HttpStatus :)

Respuestas a la pregunta(1)

Su respuesta a la pregunta