当前位置: 首页 > 面试题库 >

使用ResponseEntity时 和@RestController用于Spring RESTful应用程序

顾宏朗
2023-03-14
问题内容

我正在使用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. 如果 出于确凿的原因特定情况, 必须强制使用另一种选择
  2. 如果(1)无关紧要,则建议采用什么方法以及为什么。

问题答案:

ResponseEntity旨在表示整个HTTP响应。您可以控制其中的所有内容:状态码,标头和正文。

@ResponseBody是HTTP响应正文的标记,并@ResponseStatus声明HTTP响应的状态代码

@ResponseStatus不是很灵活。它标记了整个方法,因此您必须确保您的处理程序方法始终具有相同的行为。而且您仍然无法设置标题。您需要HttpServletResponseHttpHeaders参数。

基本上,ResponseEntity您可以执行更多操作。



 类似资料:
  • null 例如: 方法(只创建) 归还某物 null null

  • 问题内容: 我正在使用Spring Framework 4.0.7,MVC和Rest 我可以和以下人一起安心工作: 例如: With the method (just to create) to return something 工作正常 我可以用: (我知道它与+ 相同y) 例如: With the method (just to create) to return something 我的问题

  • 我有一个运行良好的Spring启动应用程序,直到我在我的应用程序中包含Kafka消费者和生产者。运行完全没有问题的代码是有一个restController,如下所示: 这个rest终点给出了期望的响应。现在,我包括Kafka制作人和消费者 在包含这些消费者和生产者之后,我的应用程序没有启动。我没有看到之前应用程序运行正常时显示的以下行。 2019-12-12 15:01:12.090信息38376

  • 问题内容: 我们正在使用Spring(4.1.1。)实现REST API。对于某些HTTP请求,我们希望返回一个没有主体的头作为响应。但是,使用似乎无效。通过MockMvc测试调用时,返回406(不可接受)。使用不带参数的值()工作正常。 方法: 测试用例(TestNG): 此堆栈跟踪失败: 问题答案: 注意:对于问题4.1.1.RELEASE中提到的版本,这是正确的。 通过来处理返回值。 当Re

  • 我正在为我的REST Web服务使用Spring@RESTController。我尝试在rest方法中返回ResponseEntity对象的对象,而不是返回ModelAndView的对象。对于Strgin类型的响应,当我用一个Jaxbobject构建ResponseEntity时,它会给出HTTP错误406 下面不起作用

  • 我一直在研究如何将Spring与REST结合使用的各种示例。我们的最终目标是Spring设置 我已经看到了两种不同的方法,用于在Spring中渲染REST > 在控制器中通过 通过存储库中的< code > @ RepositoryRestResource 我正在努力寻找的是,为什么你会使用一个而不是另一个。当尝试实施时,哪一个是最好的? 我们的数据库后端是Neo4j。