conanan's blog conanan's blog
首页
关于
  • 分类
  • 标签
  • 归档
  • Java
  • Java Web
  • 工具

    • Maven
  • MySQL
  • Redis
  • Git
  • Vim
  • Nginx
  • Docker
GitHub

Evan Xu

前端界的小学生
首页
关于
  • 分类
  • 标签
  • 归档
  • Java
  • Java Web
  • 工具

    • Maven
  • MySQL
  • Redis
  • Git
  • Vim
  • Nginx
  • Docker
GitHub
  • Jakarta EE

  • Tomcat

  • Spring

  • SpringMVC

    • 概述
    • 路由&请求参数绑定
    • 响应结果
      • @ResponseBody
      • ModelAndView...
      • String—无@ResponseBody
      • void & ajax
    • 异常处理&统一响应
    • Interceptor
    • CORS
    • 自动URL前缀
    • Jackson
  • SpringBoot

  • SpringDataJPA

  • Test
  • Shiro
  • Thymeleaf
  • Java Web
  • SpringMVC
conanan
2021-06-21

响应结果

# 响应结果

# @ResponseBody

用于将 Controller 的方法返回的对象,通过 HttpMessageConverter 接口转换为指定格式的数据如:json,xml 等,通过 Response 响应给客户端。如果需要SpringMVC支持JSON,必须加入JSON的处理jar包:如Jackson,SpringBoot默认配置。

使用 @ResponseBody 会自动设置如下代码:

  • 设置 ContentType、MIME Type。如使用 UTF-8 解决乱码

    response.setContentType("application/json;charset=utf-8");// 返回对象为 Object 时
    response.setContentType("text/plain;charset=utf-8");// 返回对象为 String 时
    
    1
    2
  • 序列化、调用 response 的输出方法

    response.getWriter().write("hello 测试2");// 若输出对象,则省掉手动序列号操作
    
    1

示例

@RequestMapping("/testJson")  
@ResponseBody
public Address testJson(@RequestBody Address address) {  
    System.out.println(address);  
    address.setAddressName("上海");  
    return address;  
}
1
2
3
4
5
6
7
$(function(){  
     // 绑定点击事件        
     $("#btn").click(function(){      
         $.ajax({          
             url:"user/testJson",  
             type:"post", 
             contentType:"application/json;charset=UTF-8",
             data:'{"addressName":"哈哈","addressNum":100}',
             success:function(data){              
                 alert(data);              
                 alert(data.addressName);          
             }
             dataType:"json",                                     
         });  
     });  
 });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# ModelAndView...

  • ModelAndView 是 SpringMVC 为我们提供的一个类,其对象也可以用作控制器方法的返回值。 两个方法:

    @RequestMapping("/testReturnModelAndView") 
    public ModelAndView testReturnModelAndView() {  
        ModelAndView mv = new ModelAndView();  
        mv.addObject("username", "张三");  //存储的request域中
        mv.setViewName("success"); 
        return mv; 
    }
    
    1
    2
    3
    4
    5
    6
    7
  • Model/ModelMap

    除了ModelAndView以外,还可以使用Model(接口)来向页面传递数据,在参数里直接声明Model即可

    使用Model可以不使用ModelAndView对象,Model对象可以向页面传递数据,View对象可以使用String返回值替代。其本质都是使用Request域对象传递数据

    model.addAttribute("item", item);
    return "itemEdit";
    
    1
    2

    ModelMap是Model接口的实现类,也可以通过ModelMap向页面传递数据。效果一样,同上代码

# String—无@ResponseBody

Controller 中方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。SpringBoot 默认查找 template 目录。

  • forward:转发

    return "forward:success";也可以添加后缀如html

  • redirect:重定向

    return "redirect:fail";

# void & ajax

  • 在Controller方法形参上可以绑定原生ServletAPI,使用request或response指定响应结果。

    //使用request请求转发页面
    request.getRequestDispatcher("页面路径").forward(request, response);
    //通过response页面重定向
    response.sendRedirect("url")
    //通过response指定响应结果,例如响应json数据如下
    response.setCharacterEncoding("utf-8"); 
    response.setContentType("application/json;charset=utf-8"); 
    response.getWriter().write("{\"abc\":123}");
    
    1
    2
    3
    4
    5
    6
    7
    8
编辑
上次更新: 2021/06/21, 15:45:42
路由&请求参数绑定
异常处理&统一响应

← 路由&请求参数绑定 异常处理&统一响应→

最近更新
01
线程生命周期
07-06
02
线程安全理论
06-24
03
并发简史
06-24
更多文章>
Theme by Vdoing | Copyright © 2019-2021 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×