SpringMVC基础--请求响应返回值、响应json数据,对json数据的封装和转换

响应返回值

在处理请求时,控制器的处理函数返回值类型可以决定其怎么响应该请求。

返回值为String类型

当返回值为string类型,会根据返回值,到视图解析器指定的路径寻找指定类型的文件显示出来。

控制器处理方法

@RequestMapping("/hello")
    public String testJson() {
        System.out.println("执行了");
        return "success";
    }

视图解析器配置

<!-- 配置视图解析器 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

处理/hello请求时就会向视图解析器指定的路径,classpath/WEB-INT/pages/去找到success.jsp文件然后显示到浏览器。

返回值为void

如果返回值void,并且控制器处理请求方法不做任何转发和重定向,则默认会向视图解析器指定的路径寻找请求名称.类型名文件。

@RequestMapping("/hello")
    public void testJson() {
        System.out.println("执行了");
    }

如上,就会去找hello.jsp文件,找不到会直接报404。
一般返回值为void类型时,都会在控制器处理方法中做转发和重定向。
下述代码包含三种方法

@RequestMapping("/testVoid")
    public void testVoid(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
        System.out.println("执行了");
        // 第一种:编写请求转发程序
        // httpServletRequest.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(httpServletRequest,httpServletResponse);
        // 第二种:重定向
        // httpServletResponse.sendRedirect(httpServletRequest.getContextPath()+"/index.jsp");
        //设置中文乱码问题
        httpServletResponse.setCharacterEncoding("UTF-8");
        httpServletResponse.setContentType("text/html;charset=UTF-8");
        // 第三种:直接会响应。直接打印出以下字符
        httpServletResponse.getWriter().println("你好");
    }

对HttpServletRequest和HttpServletResponse不了解的,可以看下这篇博客:HttpServletRequest与HttpServletResponse的实现类

返回值为ModelAndView

通过创建ModelAndView对象对数据进行封装,让后跳转到视图解析系指定路径的指定类型文件,以String为返回值类型的底层就是以ModelAndView来实现的。

@RequestMapping("/testModelAndView")
    public ModelAndView testModelAndView() {
        System.out.println("执行了");
        User user = new User();
        user.setName("美美");
        user.setPassword("123");
        user.setAge(18);
        ModelAndView mv = new ModelAndView();
        mv.addObject("user",user);
        mv.setViewName("success");
        return mv;
    }

响应JSON数据

在jsp主页面发送json数据给服务器,控制器处理方法通过@RequestBody来将json数据封装成JavaBean类型,最后通过@ResponseBody将JavaBean类型再转换成json数据。
Springmvc 默认用 MappingJacksonHttpMessageConverter 对 json 数据进行转换,需要加入 jackson 的包。

<dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.11.2</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.11.2</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.11.2</version>
    </dependency>

首先导入jquery.js文件放在类路径下js文件夹中
注意:我们在创建前端控制器的时候是拦截所有请求,包括这些静态文件。

  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

所以我们需要在springmvc的配置文件中设置过滤掉这些静态文件。

<!-- 设置静态资源不过滤 -->
<mvc:resources location="/js/" mapping="/js/**"/>
<mvc:resources location="/img/" mapping="/img/**"/>
<mvc:resources location="/css/" mapping="/css/**"/>

发送json数据

<button id="btn">按钮</button>
    <script>
        $(function () {
            $("#btn").click(function () {
                $.ajax({
                    url:"request/testJson",
                    contentType:"application/json;charset=UTF-8",
                    data:'{"name":"aa","password":100}',
                    dataType:"json",
                    type:"post",
                    success:function(data){
                        alert(data);
                        alert(data.name);
                    }
                });
            })
        })
    </script>

控制器处理方法

// ResponseBody 将JavaBean对象转换成JSON数据
    @RequestMapping("/testJson")
    public @ResponseBody  User testJson(@RequestBody User user) {
        System.out.println("执行了");
        System.out.println("user:" + user);
        return user;
    }

成功封装成JavaBean类型
在这里插入图片描述

成功转换为json数据
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值