【Java】我用spring boot实现了一个login接口,遇到的问题。
我用spring boot实现了一个login接口,并且写了一个handleException方法。在断点的时候,我发现只进入了handleException中,未进入login方法?
请问是原因导致的?我应该怎么解决这种问题?
以下是我提供的截图:
org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'otpcode' is not present
代码已更新到 github
回答
解决方法:
大概是@RequestParam的原因导致,去掉它就可以了,应该是这个东西内部实现了一套参数验证。而我要实现的是参数选填。
@RequestMapping(value = "/login", method = {RequestMethod.POST}, consumes = {CONTENT_TYPE_FORMED}) @ResponseBody
public CommonReturnType login(String telphone,
String otpcode,
String password
) throws BusinessException {
如果我使用以下写法:
@RequestMapping(value = "/login", method = {RequestMethod.POST}, consumes = {CONTENT_TYPE_FORMED})
@ResponseBody
public CommonReturnType login(@RequestParam(name = "telphone")String telphone,
@RequestParam(name = "otpcode")String otpcode,
@RequestParam(name = "password")String password
) throws BusinessException {
if(StringUtils.isEmpty(telphone)){
throw new BusinessException(EmBusinessError.PARAMETER_VALIDATION_ERROR,"手机号不能为空");
}
即使我在login中有处理telphone为空的情况,但还是会进入handleException方法,而不进入login方法中。
所以我的理解是@RequestParam实现了参数必填验证拦截,并且优于方法体内的异常捕获
要细心啊!!!! otpcode = optcode
可以理解这个异常的出现不是进入login触发的
而是在进入方法之前校验参数出现异常
所以进入了通用的异常拦截
其次 异常信息已经和明确了 你可以通过异常信息一眼看到
你的password是必传参数
以上是 【Java】我用spring boot实现了一个login接口,遇到的问题。 的全部内容, 来源链接: utcz.com/a/87312.html