@ResponseBody 和 @RequestBody以及@PathVariable的作用

一、@ResponseBody

@ResponseBody是作用在方法上的,@ResponseBody 表示该方法的返回结果直接写入 HTTP response body 中,一般在异步获取数据时使用【也就是AJAX】,在使用 @RequestMapping后,返回值通常解析为跳转路径,但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中。 比如异步获取 json 数据,加上 @ResponseBody 后,会直接返回 json 数据。@RequestBody 将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。

@ResponseBody的作用是将后端以return返回的javabean类型数据转为json类型数据。(后端向前端传数据)

案例:

前端异步请求:

function loginAction() {

    // 获取用户输入的账号和密码
    var name = $('#count').val();
    var password = $('#password').val();

    $.ajax({
        url : 'account/login',
        type : 'post',
        // data对象中的属性名要和服务端控制器的参数名一致 login(name, password)
        data : {
            'name' : name,
            'password' : password
        },
        dataType : 'json',
        success : function(result) {
            if (result.state == 0) {
                // 登录成功,设置cookie并跳转edit.html
                addCookie('userId', result.data.id);
                addCookie('nick', result.data.nick);
                location.href = 'edit.html';
            } else {
                // 登录失败
                var msg = result.message;
                $('#sig_in').next().html(msg);
                $('#sig_in').next().css("color", "red");
            }
        },
        error : function(e) {
            alert("系统异常");
        }
    });
    $('#password').val("");
}

后端业务逻辑:

@RequestMapping("/login")
@ResponseBody
public Object login(String name, String password, HttpSession session) {
    user = userService.checkLogin(name, password);
    session.setAttribute("user", user);
    return new JsonResult(user);
}

二、@RequestBody

@RequestBody是作用在形参列表上,用于将前台发送过来固定格式的数据【xml 格式或者 json等】封装为对应的 JavaBean 对象,封装时使用到的一个对象是系统默认配置的 HttpMessageConverter进行解析,然后封装到形参上。

@RequestBody的作用是将前端传来的json格式的数据转为自己定义好的javabean对象(前端向后端传递数据)

例如上方后端业务逻辑可以改为:

@RequestMapping("/login.do")
@ResponseBody
public Object login(@RequestBody User loginUuser, HttpSession session) {
    user = userService.checkLogin(loginUser);
    session.setAttribute("user", user);
    return new JsonResult(user);
}

三、@PathVariable

@PathVariable的作用是获取url中的动态参数,常用于RestFul风格的编程。通过这种方式,前端可以将参数写在url中
例如:通过id获得用户信息,前端的url可以表示为

http://localhost:8080/getUser/1 这个1就是想要查询的用户id

后端通过@PathVariable来接收这个动态参数

    @GetMapping("/getUser/{id}")
    public User getUser(@PathVariable("id") String id){
        return userService.getUserById(id);
    }

你可能感兴趣的:(开发,okhttp)