1.RequestMapping
@Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Mapping public @interface RequestMapping { String name() default ""; @AliasFor("path") String[] value() default {}; @AliasFor("value") String[] path() default {}; RequestMethod[] method() default {}; String[] params() default {}; String[] headers() default {}; String[] consumes() default {}; String[] produces() default {}; }
可以看出requestMapping可以作用在类和方法上
1.value和path是一样的,并且默认值就是路径,下面是测试,请求成功
<a href="/hello/sayHello" >入门程序</a>
2.method,规定了该方法的请求类型,如果写了,前端的请求类型一致才能访问到该方法
如果不写,则根据前端自动适应
public enum RequestMethod { GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE; private RequestMethod() { } }
此时还是使用get方法进行请求,但是设置了该方法的访问为post,则会报错405
3.params:意思是前端必须传递一个参数过来
第一种情况:
例如:
如果使用
<a href="/hello/sayHello" >入门程序</a>
则会报错
所以应该修改为带有username的参数
<a href="/hello/sayHello?username=hehe" >入门程序</a>
第二种情况:
规定了必须传递username=haha
我们传递一个username=hehe
<a href="/hello/sayHello?username=hehe" >入门程序</a>
依然会报400的错误;所以需要传递username=haha
加入我们传入多个参数呢?
<a href="/hello/sayHello?username=haha&pwd=123" >入门程序</a>
这样也是可以的,所以只要带了 params 里应该有的参数,就可以访问成功。
4.headers:浏览器的请求头里必须带哪些信息,才可以请求到
如果设置了其他头信息,普通的浏览器访问就会报错
5.consumers和produces
consumers:指定请求提交内容的类型(Content-Type),例如application/json,text/html等
例如我们希望前台传递过来是applicaton/json数据
但是我们用get请求,传递的参数类型是text/html
则会出现415的报错
使用postman发送application/json格式的数据去访问,则访问成功
producers:可以指定返回值的类型及其编码,例如
但是必须要和@ResponseBody
注解一起使用才可以,不加@ResponseBody
注解相当于按照和返回String同名jsp页面解析自然就会报错。
如果返过来,不加produces属性,只有@ResponseBody注解的话也是没有问题的,只是在浏览器中直接访问的时候有区别:
情况1:
情况2:
总的来说produces有两个好处:一个是浏览器查看方便(json自动格式化,带搜索),另一个可以防止中文乱码。
原文地址:https://www.cnblogs.com/mapleins/p/10125584.html