Wenn ResponseEntity & lt; T & gt; und @RestController für Spring RESTful-Anwendungen

Ich arbeite mit Spring Framework 4.0.7, zusammen mit MVC und Rest

Kann ich in Ruhe arbeiten mit:

  • @Controller
  • ResponseEntity<T>

Beispiel:

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

Mit der Methode (einfach zu 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);
}

zurück etwas

@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

Ich das gleiche tun, mit:

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

Beispiel:

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

Mit der Methode (einfach zu 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());
}

zurück etwas

@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:

  1. wenn für eine solide Grund oder bestimmtes Szenario eine option muss verwendet werden, zwingend über die anderen
  2. Wenn (1) nicht egal, was Ansatz wird vorgeschlagen und warum.

InformationsquelleAutor der Frage Manuel Jordan | 2014-10-24

Schreibe einen Kommentar