当前位置: 首页 > 知识库问答 >
问题:

在Spring mvc/rest开发中创建控制器时,存在以下混淆:ModelAndView,Model,@响应体,@响应实体

嵇浩然
2023-03-14

我去SpringMVC/rest开发区的时间晚了,所以我正试着了解一下这个概念。

我读了这篇stackoverflow文章:哪个更好,在spring3控制器上返回“ModelAndView”或“String”,这篇文章讨论了ModelAndView的优点,并在控制器上使用字符串返回(将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控制器代码:

控制器定义为:

@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);
}

我找了一些关于@responseboody和@ResponseEntity优点的帖子,像这样的帖子ResponseEntity之间有什么区别

我现在的问题是,因为我在这个领域是一个新手,浏览示例代码让我搞不清楚应该采取什么方法,应该朝哪个方向走?我相信ModelAndView和Model在返回字符串时可能是一种旧方法?也许历史记录或从ModelAndView到@ResponseBody/@ResponseEntity的转换会有所帮助?这是因为spring版本吗?

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

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

共有1个答案

魏明亮
2023-03-14

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

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

响应性

您将使用什么取决于您自己,并且只取决于您的需求。

 类似资料:
  • 问题内容: 在一个WebAPI项目中,我有一个控制器,可以根据用户输入的值来检查产品的状态。 假设他们输入“ 123”,响应应该是“状态”:1,以及产品列表。如果输入“ 321”,则“状态”为0,并列出产品。 我的问题是,如何在WebAPI控制器中构建正确的字符串。 另外,此输出/响应是否被视为有效? 问题答案: 因此,这是您的帖子的更改: 首先,您应该在传递请求时让api默认返回Json (这是

  • 问题内容: 我正在编辑内置的表单。 我在对话框中显示该表单,然后提交。 数据已正确输入数据库。 但是我不知道是否需要将一些寄回。其实我对事情有点困惑。 假设我在表中使用``jQuery添加了一行,当我提交表单时,然后在提交数据之后,我想发回那些行数据,以便我可以动态添加表行以显示添加的数据。 我很困惑如何获取这些数据。 这是我当前的代码: 这只是带有成功消息的模板。 问题答案: Symfony 2

  • 我有一个方法,调用一个endpoint来发布客户我怎么才能只得到消息"EMAIL ALREADY EXISTS"从响应体的Rest模板,以便在FacesContext中显示它 这是回应机构

  • 问题内容: XlsxWriter对象另存为http响应以在Django中创建下载? 问题答案: 我想你是在询问如何使用创建内存中的excel文件并通过返回。这是一个例子: 希望能有所帮助。

  • @覆盖 公共列表getOrder(String orderNo){ StoredProcedureQuery=EntityManager.createstoredProcedureQuery(“xx.xxx.get_order_details”);query.RegisterStoredProcedureParameter(1,String.class,parametermode.in);quer

  • 问题内容: 我的代码中有一个ajax调用。我想通过通话实现的效果很好。我想从数据库中删除一些记录,当通过ajax调用该方法时,该记录实际上被删除了,但是就像在symfony方法中,它必须返回一个响应,这就是为什么当执行该方法时会给我错误 我的Ajax电话是 而执行的方法是 我如何从该方法成功返回?有任何想法吗?谢谢 问题答案: 替换为。也不要忘记在顶部写。