415 Unsupported Media Type

测试spring mvc  @ModelAttribute 属性时报错

 

jsp 文件

<%@ page language="java" import ="java.util.*" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javaScript" src="${pageContext.request.contextPath }/js/jquery-3.6.0.min.js">
</script>
</head>
<body>
    ${requestScope.a} <br/>
    ${sessionScope.a} <br/>
    ${requestScope.uu.name} <br/>
    ${requestScope.user.name} <br/>
    
<form name="Form2"  id="form2" action ="" method="post"  enctype="multipart/form-data"> 
     姓名:<input type="text" name="name" id="name">
     id:<input type="text" name="id" id="id">
 <input type="button" value="测试" onclick="testJson()" />
</form> 
</body>
<script type="text/javascript">
function testJson() {
    var name = $("#name").val();
    var id = $("#id").val();
    alert("姓名"+name+",id:"+id);
    $.ajax({
        //请求路径
        url : "testModelAttribute",
        //请求类型
        type : "post",
        //data表示发送的数据
        data :{
                "name" : name,
                "id" : id
            }, 
        //定义回调响应的数据格式为JSON字符串,该属性可以省略
        dataType : "json",
           /* contentType :'application/json',  */
        //成功响应的结果
        success : function(data) {
            alert(data);
            if (data != null) {
                alert("输入的用户名:" + data.name + ",密码:" + data.id);
            }
        }
    });
}  
 

</script>
</html>

 

controller 类

@Controller
public class TestAttribute {

    @Resource
    private HibernateTemplate hibernateTemplate;
    
    public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
        this.hibernateTemplate = hibernateTemplate;
    }
    @ModelAttribute
    public void getUser(@RequestParam (value ="id",required =false) String id,Map<String, Object> map) {
        System.out.println("进入了查询方法 getuser");
        User user = null ;
        if (id!=null) {
            String sql= " FROM User WHERE id = :id ";
            List<User> list= (List<User>) hibernateTemplate.findByNamedParam(sql, "id", Integer.valueOf(id));
            user = list.get(0);
        }
        map.put("user", user);
        System.out.println("user1:"+user);
    }
    /**
     *      测试 @ModelAttribute 属性 ,既如果页面上修改数据 需要保存数据 但是 不能显示敏感字段时 
     *      可以从数据查询后 返回页面这样修改数据就不会把特俗字段置空
     *      例如 测试修改 用户名字 页面又不能显示用户密码  逻辑根据页面ID去数据查询到 user 实体 返回页面,修改的时候直接用实体修改就有密码了 
     * @param user
     * @return
     */
    @RequestMapping("/testModelAttribute")
    @ResponseBody
    public  User testModelAttribute(@RequestBody User user) {
        System.out.println("user2:"+user);
        return user;
    }
}

看视频上说 如果 Ajax 接受参数为pojo 实体类就要加上 注解 @RequestBody 用

原先以为时 Ajax没有配置  contentType :'application/json', 加上之后获取不到参数值 获取的user 是null

后来去掉了 jsp 的contentType  配置 和  @RequestBody 参数 可以正常测试了,不知道时什么问题。也可能是我的jar包版本太低

修改后的方法

    @RequestMapping("/testModelAttribute")
    @ResponseBody
    public  User testModelAttribute(User user) {
        System.out.println("user2:"+user);
        return user;
    }
posted @ 2021-04-07 12:37  奋斗的渣渣  阅读(442)  评论(0编辑  收藏  举报