对Spring中@Responsebody与@RequestBody理解

@ResponseBody与@RequestBody使用之前将使用@RequestMapping,因此先来了解@RequestMapping作为预备知识


@RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。若用于类上,则表示该类中的所有响应请求的方法都是用该地址作为父路径。

@RequestMapping("/user")
public class UserController {
    @RequestMapping(value = "/index", method = RequestMethod.GET)
    public String demo(){
        return "test";
    }
}

像如上面的代码中,当输入路径为 user/index 时将会返回test.jsp页面


接下来我们来了解一下@ResponseBody

@ResponseBody可将返回的结果直接写入HTTP response body中,因此可在异步获取数据时使用。

而使用@RequestMapping后,返回值通常都会解析成跳转路径,但是在返回之前用@ResponseBody修饰后,返回结果将不解析为跳转路径,而是直接写入HTTP response body 中。例如异步获取json数据时,加上@Responsebody后,会直接返回json数据。


在此顺便附上两种java返回json的方法

第一种就是普通的字符串拼接,不使用@ResponseBody

@RequestMapping(value="/xxx",method=RequestMethod.POST)
public void demo(HttpServletResponse response){
    String json="";
    json="{\"success\":true,\"mag\":\"good\"}";
    try{
        response.getWriter().print(json);
        response.getWriter().flush();
        response.getWriter().close();
    }catch(Exception e){
        e.printStackTrace();
    }
}
第二种就是利用@ResponseBody返回 json

public class Person {

	private int id;
	private String name;
	private boolean status;

	public Person(int id,String name,boolean status) {
        this.id=id;
        this.name=name;
        this.status=status;
        
	}
}

@RequestMapping(value = "/person/profile/{id}/{name}/{status}", method = RequestMethod.GET)  
public @ResponseBody  
Person porfile(@PathVariable int id, @PathVariable String name,  
        @PathVariable boolean status) {  
    return new Person(id, name, status);  
}


接下来我们来介绍一下@RequestBody将HTTP请求正文插入方法中,使用合适的HttpMessageConverter将请求体写入某个对象中。

function login() {//页面异步请求
    var mydata = '{"name":"' + $('#name').val() + '","id":"'+ $('#id').val() + '","status":"' + $('#status').val() + '"}';
    $.ajax({
        type : 'POST',
        contentType : 'application/json',
        url : "user/login",
        processData : false,
        dataType : 'json',
        data : mydata,
        success : function(data) {
            alert("id: " + data.id + "\nname: " + data.name + "\nstatus: " + data.status);
        },
        error : function() {
            alert('出错了!');
        }
    });
};

@RequestMapping(value = "user/login")
@ResponseBody
public Person login(@RequestBody Person person) {//将请求中的mydata写入Person对象中
    return person;//不会被解析为跳转路径,而是直接写入HTTP response body中
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值