springmvc学习

问题引出:

基于目前项目多为前后端分离的趋势下(有关原因可参看 以下三个网址
1.前后端分离情况下如何在 html 中进行值/参数的传递?
2.为什么一定要前后端分离?
3.前后端分离架构概述
),

许多教程使用springmvc的Controller类的时候 多是基于jsp的,即都是使用modelAndView 对象将数据封装到modelAndView 中 在直接跳转到 ”xxx.jsp"中
这样的做法 虽能在前端显示数据出来 但是耦合度太高在后端控制页面跳转了

我们说在web项目中,若使用springmvc,则controller的返回值一般有两种,一种是返回对应的页面(例如html页面,jsp页面),一种是返回数据(例如json格式的数据)。

1.使用@Controller注解,返回对应的页面(不推荐)
如下代码:

@Controller
public class UserController {
 
    @Resource
    private IUserService userService;
    @RequestMapping("/userLogin")
    public String userLogin(@Param("userName") String userName){
			  model.addAttribute("msg", "this is a msg");
      		  return "success";//返回对应的名为success的页面 因为在 springmvc-servlet.xml配置过前缀后缀 了
    }
 
}
 

springmvc-servlet.xml 配置 jsp 的前缀后缀


  
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>

    </bean>

方案2. 在方法上加上@ResponseBody注解,返回json格式的数据 (直接返回数据 由前端控制这些数据 然后利用js等渲染成页面 再由前端控制跳转等操作 推荐!!)。

具体的如何配置
springMvc并返回JSON数据请看这

代码如下:

public class UserController {
 
    @Resource
    private IUserService userService;
     
    @RequestMapping(value="/findAll",produces="application/json;charset=UTF-8)
    @ResponseBody
    public List<Department> findAll(){ //查找所有部门
         List<Department> depts=userService.findAllDepts();
        return depts;
    }
}
 

主要是要加上 @ResponseBody 即告诉前端 要返回的是json格式的数据(其实不只是List可以转成json 普通类型 javabean类型等 都可以转换 并按照json字符串返给前端)

此外
1.加粗样式参数 produces用来指定当前的请求希望得到什么类型的数据,这个参数在请求的时候会被放到请求头的Accept中。 只有当请求的Accept类型与控制器中使用produces指定的类型相同的时候才会被该控制器接受并处理。
加上这个参数之后可以访问到 localhost:8080/findAll 并显示数据

2.参数consumes用来指定该控制器要处理的请求的数据类型,所谓媒体类型就是指text/plain 或者application/json或者 text/html等等。
它们会被放在请求的请求头中,比如Content-Type: application/x-www-form-urlencoded表示请求的数据为key/value数据,
只有当请求数据与控制器在@RequestMapping中指定的数据相同的时候,指定的请求才会被该控制器处理。

但是 加上这个consumes参数为什么不能获取controller中设置的数据呢??(有待解决)ps:我认为是前端还没发请求(所以默认处理的请求和@RequestMapping中指定的数据不一致)
于是访问时有如下错误:
在这里插入图片描述
待日后查看把…

参考文章1
参考文章2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值