相信Java后端的同学们会经常看到都会经常看到@RequestBody、@pathvariable、@RequestParam,什么时候该用什么样的注解或者是不用注解。让我们来了解一下。
RequestParam会获取url链接上面的参数内容,然后获取匹配的参数作为接口参数传递给方法执行逻辑。如果请求的参数和接口方法参数名称一致,可以不需要显式使用该注解,例子如下:
@RestController('/')
}
/**
*接口参数使用默认
*
*@return
*/
@GetMapping('/getTest')
return'getTest:'+var1+'---'+var2;
}
return'getTest:'+var1+'---'+var2;
}
}
在本地起一个简单的springboot项目之后,简单修改一下代码,分别请求两个接口,大家猜猜分别返回什么?
请求1:
返回:
getTest:1---22
请求
返回:
从上面的例子可以看出,如果不指定@RequestParam的值,默认会获取同名参数,如果指定值,则会在url中获取对应名称的值。
点进@RequestParam注解中,我们可以看到有对应三个参数,分别对应参数名,参数值以及是否必填
@AliasFor('name')
Stringvalue()default'';
@AliasFor('value')
Stringname()default'';
StringdefaultValue()default' ue000ue001ue002 ';
}
@PathVariable注解相当于一个占位符的操作方式,可以获取请求路径中的值。
用法如下:
publicStringgetTest1(@PathVariable('var1')Stringvar1,@PathVariable('var2')Stringvar{
return'getTest:'+var1+'---'+var2;
}
//返回:getTest:11---22
这种做法将参数也放进了请求映射的路由当中,有时候可以使代码逻辑更加明显。
如将用户和行为都当成请求连接的一部分@GetMapping('/getTestWithPathParam/{userId}/{action}')
@RequestBody直接以String接收前端传过来的参数数据。也就是ajax中的data内容。RequestBody的值,需要配合请求中的content-type,一般使用application/json,用于接收一个json对象
}
下面一些示例:
@PostMapping('/postTest')
return'postTest:'+var1+'---'+var2;
}
//返回
//--------------------
//{'var1':'11','var2':'22'}
//返回
总结
requestParam只会读取url后面的参数,requestBody只会请求body中的data。其实也是算是跟名字描述一样了哈哈。pathVariable根据实际情况可以定义。
个人在尝试过程中,content-type如果是application/x-www-form-urlencoded,其实相当于将url后的参数进行urlencoded之后作为参数。也是一个词如其名了。
还是建议要多写写,多试试。
文章为作者独立观点,不代表 股票程序化软件自动交易接口观点