java springclub_java框架(2.2)@ResponseBody和@Requestbody

上章讲到了@RestController注解,该注解是对@Controller注解的增强,处理标记控制器,还可以让类下所有的方法都返回json格式的数据。有人会问了:我并不是控制器下每个方法都要返回json啊,我有可能要返回渲染页面啥的怎么办?不用担心,接下来要讲到的@ResponseBody就是解决方案。

在上章基础之上,我们改回@Controller,然后在类上加上一个@ResponseBody注解。

@Controller

@RequestMapping(value = "/json")

@ResponseBody

public class JsonController {

@RequestMapping(value = "/test")

public String jsonTest(){

return "dayaoguai";

}

}

运行效果一样

87fc7c22-2f68-4f1b-b7f7-b3fb2f125d5b.png

我们再改成注解到类上面,为了有区别,我们再写一个同样功能的:

@Controller

@RequestMapping(value = "/json")

public class JsonController {

@RequestMapping(value = "/test")

@ResponseBody

public String jsonTest(){

return "dayaoguai";

}

@RequestMapping(value = "/test1")

public String jsonTest1(){

return "dayaoguai";

}

}

访问test:

fd57f61b-a911-45ab-8c05-bdae2401fd2b.png

访问test1:

992b44a0-d7c1-42d9-a1ae-25a5cfaf443d.png

由上述实验可以看出我们的@ResponseBody注解的作用就是返回json格式的内容。而@RestController其实就是@Controller和@ResponseBody的结合。我们来对比一下@Controller和@RestController的源码:

@Controller:

f2514415-1a30-42b6-9c42-3f5139fbe0a5.png

@RestController:

22265439-75ff-4e47-926d-94b856b170bd.png

很显然,@RestController的做法就是加了@Controller和@ResponsBody罢了:

35c6a601-abfe-4e92-b0f1-7eee9d45a5b9.png

所以其实真正控制返回json格式的注解还是@ResponsBody。

那么我们既然有返回json格式的方法,那么有没有接收json格式的方法呢?

答案还是有(废话,要是没有我在这问什么!!!)。我们可以用@Requestbody作为解决方案。

新建一个方法,然后我们去接收一个参数name:@RequestMapping(value = "/jsonParam",method = RequestMethod.POST)

public void jsonParam(String name){

System.out.println(name);

}

我们用poster先用普通方式访问一下,传参数name=dayaoguai:

e8215952-7852-4a6b-a87c-be286eb2f09e.png

在控制台我们可以看到接收到了结果:

4a29836a-2a37-4c10-a8f8-fc716a4b3dc5.png

那么我们再用json方式访问一下:

09992be7-3962-47f8-9deb-47cc2e9aeca7.png

可以在控制台看到打印了null:

ff262b22-c812-4ea5-9d30-83e8ae197151.png

这说明请求成功了但是没有成功获取到参数。

那么,我们再加上@Requestbody注解试试:@RequestMapping(value = "/jsonParam",method = RequestMethod.POST)

public void jsonParam(@RequestBody String name){

System.out.println(name);

}

注意这个注解必须要加在参数的前面。

我们再来进行json请求试试:

e994a704-b5f4-4fd8-a026-55d091935199.png

这次看到控制台打印了参数,说明接收成功了:

f0f4f29b-6b45-44a7-9385-14c2c368c900.png

但是我们用普通传参试试:

e416042b-bdef-486d-8f9d-5ef076eacc92.png

但是结果并不是我们想要的:

2e96910f-03d7-469d-97a8-8a46a03b221f.png

通过这个结果,我们不难猜出加了@ResponseBody注解SrpingMVC注解在底层对我们的数据进行了某些拼装,有兴趣的同学可以自己去了解了解源码。

总结:

@ResponseBody可以注解到类或方法上,注解到类表示对该类下所有方法都生效,注解到方法上则表示只对该方法生效

@RequestBody只能注解到参数上,表示要接收的参数是一个json格式的参数。

带@RequestBody只能接收json格式的参数不能接收普通参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值