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.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage