此处将为大家介绍关于使用ResponseEntity时和@RestController用于SpringRESTful应用程序的详细内容,并且为您解答有关response.setcontenttype(
此处将为大家介绍关于使用ResponseEntity时 和@RestController用于Spring RESTful应用程序的详细内容,并且为您解答有关response.setcontenttype()的作用的相关问题,此外,我们还将为您介绍关于3.7、@ResponseBody 和 @RestController、@Controller,@ResponseBody,@RestController,@RequestMapping,@GetMapping作用、@ResponseBody和@RestController、@ResponseBody和@RestController的区别的有用信息。
本文目录一览:- 使用ResponseEntity时 和@RestController用于Spring RESTful应用程序(response.setcontenttype()的作用)
- 3.7、@ResponseBody 和 @RestController
- @Controller,@ResponseBody,@RestController,@RequestMapping,@GetMapping作用
- @ResponseBody和@RestController
- @ResponseBody和@RestController的区别
使用ResponseEntity时 和@RestController用于Spring RESTful应用程序(response.setcontenttype()的作用)
我正在使用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)无关紧要,则建议采用什么方法以及为什么。
答案1
小编典典ResponseEntity
旨在表示整个HTTP响应。您可以控制其中的所有内容:状态码,标头和正文。
@ResponseBody
是HTTP响应正文的标记,并@ResponseStatus
声明HTTP响应的状态代码。
@ResponseStatus
不是很灵活。它标记了整个方法,因此您必须确保您的处理程序方法始终具有相同的行为。而且您仍然无法设置标题。您需要HttpServletResponse
或HttpHeaders
参数。
基本上,ResponseEntity
您可以执行更多操作。
3.7、@ResponseBody 和 @RestController
本部分示例代码见此项目的 mvc 分支下的 RespBodyController.java 和 TheRestController.java
① 使用注解@ResponseBody映射响应体
注解@ResponseBody
和@RequestBody
很像。这个注解可以放到一个方法中,指示返回类型应该直接被写进HTTP响应体中(而不是放到一个Model中、也不是翻译为一个视图名)。例如:
@GetMapping("/something")
@ResponseBody
public String helloWorld() { return "Hello World"; }
上面的示例会返回文本 “Hello World”,并把它写到HTTP响应流中。
就像@RequestBody
,Spring 使用HttpMessageConverter
把返回的对象转换到请求体中。更多关于这些转换器的消息,参见消息转换器.
② 使用注解@RestController
创建 REST 控制器
一个非常常见的场景是让控制器实现 REST API,因此只服务于 JSON、XML 或者自定义的 MediaType 内容。为了方便,避免在所有的@RequestMapping
方法上加上@ResponseBody
注解,你可以用@RestController
注解你的控制器类.
@RestController 是一个模板注解,它合并了@ResponseBody
和@Controller
。不仅如此,它还为你的控制器赋予了更多的意义,在未来的发行版本中也将包含更多语义。
就像常规的@Controllers
,@RestController
可以由@ControllerAdvice
或者@RestControllerAdvice
Bean 协助。详情见用 @ControllerAdvice 和 @RestControllerAdvice 通知控制器”一节
@Controller,@ResponseBody,@RestController,@RequestMapping,@GetMapping作用