spring MVC 返回值信息和ResponseBody的响应json数据

spring mvc的界面返回:

如果我们定义的返回类型是String 那么我们返回的时候直接写入 我们的界面的名字就可以了  springmvc会自动去找到我们的界面,如果是void类型的返回那么 是没有返回值的,如果没有返回值这个时候我们定义了 请求信息但是没有返回 跳出去那么 就会报错  就需要自定义界面返回

    /**
     * void定义的方法是没有返回值的   如果我们想要定义返回值就需要 使用request和respone信息来进行定义
     * @param request
     * @param response
     */
    @RequestMapping("void") //controller请求
    public void testvoid(HttpServletRequest request, HttpServletResponse response) throws Exception{

        request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);  //你想要跳转的界面
     return;
}

还可以进行界面重定向

response.sendRedirect(request.getContextPath()+"/index.jsp");  //因为不定直接请求到WEB-INF下的界面我们只能请求webapp下的了

界面直接输出:

    @RequestMapping("/void")
    public void testvoid(HttpServletRequest request, HttpServletResponse response) throws Exception{

//        request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);  //你想要跳转的界面

        //因为不定直接请求到WEB-INF下的界面我们只能请求webapp下的了
//        response.sendRedirect(request.getContextPath()+"/index.jsp");


        //设置中文乱码

        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=utf-8");

        //直接请求进行的响应
        response.getWriter().print("hello"); //界面直接输出的是hello

        return;
    }

ModelAndView

返回值也可以直接定义是ModelAndView 的类型而不是字符串

    @RequestMapping("/model")
    public ModelAndView testmodelandView(){
        ModelAndView mv = new ModelAndView();

        // modeladnView有两个我们常用的属性
        User user = new User();
        user.setUsername("老王");
        user.setU_password("123456");

        //addObject把一个对象传递到mv中然后添加到界面
        mv.addObject("user",user);

        //设置跳转的界面
        mv.setViewName("user");
        return mv;
    }

ResponseBody响应json数据

1. DispatcherServlet会拦截到所有的资源,导致一个问题就是静态资源(imgcssjs)也会被拦截到,从而

不能被使用。解决问题就是需要配置静态资源不进行拦截,在springmvc.xml配置文件添加如下配置 1. mvc:resources标签配置不过滤

1. location元素表示webapp目录下的包下的所有文件
2. mapping元素表示以/static开头的所有请求路径,如/static/a 或者/static/a/b

 
<!-- 设置静态资源不过滤 -->
<mvc:resources location="/css/" mapping="/css/**"/><!-- 样式 --> 
<mvc:resources location="/images/" mapping="/images/**"/> <!-- 图片 -->
<mvc:resources location="/js/" mapping="/js/**"/> <!-- javascript -->

使用@RequestBody获取请求体数据

// 页面加载
// 页面加载 $(function(){
// 绑定点击事件 $("#btn").click(function(){
        $.ajax({
            url:"user/testJson",
            contentType:"application/json;charset=UTF-8",
            data:'{"addressName":"aa","addressNum":100}',
            dataType:"json",
            type:"post",
            success:function(data){
                alert(data);
                alert(data.addressName);
            }
}); });
}); /**
  

上面是前端往后端发送数据那么是 json的  我们需要其余的包导入来进行转化

json字符串和JavaBean对象互相转换的过程中,需要使用jacksonjar

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

controller获得请求体中的数据

* 获取请求体的数据 * @param body
*/
@RequestMapping("/testJson")
public void testJson(@RequestBody String body) {  // 利用RequestBody的信息来进行前端json信息的获取
    System.out.println(body);  //
}

使用@RequestBody注解把json的字符串转换成JavaBean的对象

上面是取出数据 那么我们传递的数据怎么把它转化为 json呢 这个时候就要用到 @ResponseBody

@RequestMapping("/testJson")
public @ResponseBody Address testJson(@RequestBody Address address) {
    System.out.println(address); 
    address.setAddressName("上海");
     return address;
}
  
原文地址:https://www.cnblogs.com/zhaoyunlong/p/10920321.html