栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringMVC接收参数 具体示例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringMVC接收参数 具体示例

理论基础

在jquery的ajax中,如果没加contentType:“application/json”,那么data就应该对应的是json对象;如果加了contentType:“application/json”,那么ajax发送的就是字符串。

示例1

网页ajax多加了contentType:“application/json”,data却错传成json对象:

后台处理:(employee该pojo对象里有username和password等String字段)

结果都为null

将contentType去掉后,

后台成功反射出对象:

示例2:ajax中没加contentType:“application/json”,data却直接使用了json字符串


后台情况:

实体类
@Data
public class Dept {
    private Integer deptno;
    private String dname;
    private String loc;
}
后台控制器
@Controller
@RequestMapping("/dept")
public class DeptController {
    @RequestMapping("/add")
    void add(HttpServletRequest request){
        try {
            ServletInputStream is = request.getInputStream();
            String result = new BufferedReader(new InputStreamReader(is))
                    .lines().collect(Collectors.joining(System.lineSeparator()));
            System.out.println(result);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    @PostMapping(value = "/add1")
    public ModelAndView add1(HttpServletRequest request) {
        String deptno = request.getParameter("deptno");
        String dname = request.getParameter("dname");
        String loc = request.getParameter("loc");
        Dept dept = new Dept(Integer.parseInt(deptno), dname, loc);
        return new ModelAndView("/res", "res", dept);
    }

    @PostMapping("/add2")
    public ModelAndView add2(Integer deptno, String dname, String loc) {//前台页面传递过来的数据会自动实例化
        Dept dept = new Dept(deptno, dname, loc);
        return new ModelAndView("/res", "res", dept);
    }

    @RequestMapping("/add3")
    public ModelAndView add3(Dept dept) {//前台页面传递过来的数据会自动实例化
        System.out.println(dept);
        return new ModelAndView("/res", "res", dept);
    }

    @RequestMapping("add4")
    public void add4(Dept dept, HttpServletResponse response) throws IOException {// 变量的名称无所谓,不是必须得和前台页面一致,只要类型不错就行了
        response.setContentType("application/json");
        PrintWriter out = response.getWriter();
        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writevalueAsString(dept);
        out.write(json);
    }

    @ResponseBody
    @RequestMapping("add5")
    public Dept add5(Dept dept) throws IOException {// 变量的名称无所谓,不是必须得和前台页面一致,只要类型不错就行了
        return dept;
    }

}
普通表单 示例一:后台通过HttpServletRequest获取
示例二:后台通过具体的属性获取
示例三:后台通过具体的对象获取
示例四:后台通过具体的属性获取
前台以JSON方式传递数据 后台通过具体的对象获取
指定contentType 网页通过JSON形式向后台传递数据
网页通过key/value形式向后台传递数据

注:

  • contentType: “application/x-www-form-urlencoded”

    • 如果不指定contentType,后台会将接收到的value值赋给Controller方法的对象参数(或封装后赋给Controller方法的对象参数):
    • 如果指定contentType,后台只能将接收到的value值赋给Controller方法的对应参数
  • contentType: “application/json;charset=UTF-8”

    • 如果不指定contentType,1-5都行
    • 如果指定contentType,只能通过add获取参数的值
    • 若控制器方法对象参数前面加@RequestBody 或@RequestParam,会报xhr。

故:实际项目中,不建议指定contentType,省得为自己找麻烦

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/581690.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号