我正在使用 Spring Framework 4.0.7,以及 MVC 和 Rest
我可以安心地工作:
-
@Controller
-
ResponseEntity<T>
例如:
@Controller
@RequestMapping("/person")
@Profile("responseentity")
public class PersonRestResponseEntityController {
用方法(只是为了创建)
@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);
}
返回一些东西
@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);
}
工作正常
我也可以这样做:
-
@RestController
(我知道它与@Controller
+@ResponseBody
相同) -
@ResponseStatus
例如:
@RestController
@RequestMapping("/person")
@Profile("restcontroller")
public class PersonRestController {
用方法(只是为了创建)
@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());
}
返回一些东西
@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;
}
我的问题是:
- 当出于正当理由或特定场景必须强制使用一个选项而不是另一个选项
- 如果 (1) 无关紧要,建议采用什么方法以及原因。
最佳答案
ResponseEntity
旨在表示整个 HTTP 响应。您可以控制其中的任何内容:状态代码、标题和正文。
@ResponseBody
是 HTTP 响应正文的标记,@ResponseStatus
声明 HTTP 响应的状态码。
@ResponseStatus
不是很灵活。它标记了整个方法,因此您必须确保您的处理程序方法始终以相同的方式运行。而且您仍然无法设置标题。您需要 HttpServletResponse
。
基本上,ResponseEntity
可以让您做更多事情。
关于spring - 将 ResponseEntity<T> 和 @RestController 用于 Spring RESTful 应用程序时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26549379/