gpt4 book ai didi

spring - spring mvc/rest development创建controller时出现以下: ModelAndView, Model, @ResponseBody, @ResponseEntity 混淆

转载 作者:行者123 更新时间:2023-12-04 17:48:49 24 4
gpt4 key购买 nike

我迟到了 spring mvc/rest 开发区,所以我正在努力了解这个概念。

我阅读了这篇 stackoverflow 帖子:Which is better, return "ModelAndView" or "String" on spring3 controller其中讨论了 ModelAndView 的优点以及在 Controller 上使用 String 返回(使用 Model 作为方法参数)。我重新发布代码

@RequestMapping(value = "/list", method = RequestMethod.GET)
public ModelAndView list(
@UserAuth UserAuth user,
ModelAndView mav) {

if (!user.isAuthenticated()) {
mav.setViewName("redirect:http://www.test.com/login.jsp");
return mav;
}

mav.setViewName("list");
mav.addObject("articles", listService.getLists());

return mav;
}


@RequestMapping(value = "/list", method = RequestMethod.GET)
public String list(
@UserAuth UserAuth user,
Model model) {

if (!user.isAuthenticated()) {
return "redirect:http://www.test.com/login.jsp";
}

model.addAttribute("articles", listService.getLists());

return "list";
}

也是这一次,我找到了另一套spring mvc controller的代码:

Controller 定义为:

@RestController
public class EmployeeRESTController

这有一个返回 EmployeeListVO 的方法。

@RequestMapping(value = "/employees")
public EmployeeListVO getAllEmployees()
{
EmployeeListVO employees = new EmployeeListVO();

EmployeeVO empOne = new EmployeeVO(1,"Lokesh","Gupta","howtodoinjava@gmail.com");
EmployeeVO empTwo = new EmployeeVO(2,"Amit","Singhal","asinghal@yahoo.com");
EmployeeVO empThree = new EmployeeVO(3,"Kirti","Mishra","kmishra@gmail.com");


employees.getEmployees().add(empOne);
employees.getEmployees().add(empTwo);
employees.getEmployees().add(empThree);

return employees;
}

这次换个方法

@RequestMapping(value = "/employees/{id}")
public ResponseEntity<EmployeeVO> getEmployeeById (@PathVariable("id") int id)
{
if (id <= 3) {
EmployeeVO employee = new EmployeeVO(1,"Lokesh","Gupta","howtodoinjava@gmail.com");
return new ResponseEntity<EmployeeVO>(employee, HttpStatus.OK);
}
return new ResponseEntity(HttpStatus.NOT_FOUND);
}

我找了一些关于@ResponseBody 和@ResponseEntity 优点的stackoverflow 帖子,像这样的帖子What is the difference between ResponseEntity<T> and @ResponseBody?

我现在的问题是,由于我在这个领域还很陌生,而且浏览示例代码让我对采用什么方法、应该朝哪个方向感到困惑?我相信 ModelAndView 和 Model 在返回 String 时可能是一种旧方法?也许历史或从 ModelAndView 到 @ResponseBody/@ResponseEntity 的过渡可能有帮助?这是因为 Spring 版本吗?

为我的问题添加上下文,在我目前的工作中,我们使用的是 Spring 4,但在代码中我看到代码库中混合了所有这些类型的方法(不同的开发人员在代码库上工作已经 x 年了)。

我希望 mods 不会关闭它并将其视为基于意见。我想我可以在这个网站上向经验丰富的开发人员寻求指导。

最佳答案

ModelAndView以及返回字符串(模板名称)用于具有 Web 界面(例如网站)的情况,因此您使用的是 Spring MVC,并且通常将其与 @Controller 一起使用。注释。

@ResponseBody意味着无论您返回什么,都将是响应的主体(响应还有其他部分以及标题等)。 Spring 还将尝试根据给定方法“产生”的内容将其自动转换为适当的形式(并且在 @RequestMapping 中定义,但不仅限于此)。例如使用 @RestController意味着无论您在方法中返回什么,都将被转换为 JSON,除非您另有指定(注意 @ResponseBody 附加到 @RestController)。

ResponseEntity<T>表示整个响应(带有 T 的正文),而不仅仅是像 @ResponseBody 中的正文.您可以指定 header 、响应代码、响应内容(正文),如文件内容、纯文本等。因此基本上您可以对 HTTP 响应的每个部分进行建模。

您将使用什么由您决定,并且仅取决于您的要求。

关于spring - spring mvc/rest development创建controller时出现以下: ModelAndView, Model, @ResponseBody, @ResponseEntity 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46697268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com