Wenn ResponseEntity <T> und @RestController für Spring RESTful-Anwendungen verwendet werden

Ich arbeite mit Spring Framework 4.0.7 zusammen mit MVC und Rest

Ich kann in Ruhe arbeiten mit:

@ControllerResponseEntity<T>

Beispielsweise

@Controller
@RequestMapping("/person")
@Profile("responseentity")
public class PersonRestResponseEntityController {

Mit der Methode (nur zum Erstellen)

@RequestMapping(value="/", method=RequestMethod.POST)
public ResponseEntity<Void> createPerson(@RequestBody Person person, UriComponentsBuilder ucb){
    logger.info("PersonRestResponseEntityController  - createPerson");
    if(person==null)
        logger.error("person is null!!!");
    else
        logger.info("{}", person.toString());

    personMapRepository.savePerson(person);
    HttpHeaders headers = new HttpHeaders();
    headers.add("1", "uno");
    //http://localhost:8080/spring-utility/person/1
    headers.setLocation(ucb.path("/person/{id}").buildAndExpand(person.getId()).toUri());

    return new ResponseEntity<>(headers, HttpStatus.CREATED);
}

etwas zurückbringe

@RequestMapping(value="/{id}", method=RequestMethod.GET)
public ResponseEntity<Person> getPerson(@PathVariable Integer id){
    logger.info("PersonRestResponseEntityController  - getPerson - id: {}", id);
    Person person = personMapRepository.findPerson(id);
    return new ResponseEntity<>(person, HttpStatus.FOUND);
}

Funktioniert gu

Ich kann das gleiche mit @ t:

@RestController (Ich weiß, es ist das gleiche wie@Controller + @ResponseBody)@ResponseStatus

Beispielsweise

@RestController
@RequestMapping("/person")
@Profile("restcontroller")
public class PersonRestController {

Mit der Methode (nur zum Erstellen)

@RequestMapping(value="/", method=RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
public void createPerson(@RequestBody Person person, HttpServletRequest request, HttpServletResponse response){
    logger.info("PersonRestController  - createPerson");
    if(person==null)
        logger.error("person is null!!!");
    else
        logger.info("{}", person.toString());

    personMapRepository.savePerson(person);
    response.setHeader("1", "uno");

    //http://localhost:8080/spring-utility/person/1
    response.setHeader("Location", request.getRequestURL().append(person.getId()).toString());
}

etwas zurückbringe

@RequestMapping(value="/{id}", method=RequestMethod.GET)
@ResponseStatus(HttpStatus.FOUND)
public Person getPerson(@PathVariable Integer id){
    logger.info("PersonRestController  - getPerson - id: {}", id);
    Person person = personMapRepository.findPerson(id);
    return person;
}

Meine Fragen sind:

wannus gutem Gru oderspezifisches Szenario eine Option muss zwingend über der anderen verwendet werdenWenn (1) keine Rolle spielt, welcher Ansatz vorgeschlagen wird und warum.