【Java】我用spring boot实现了一个login接口,遇到的问题。

我用spring boot实现了一个login接口,并且写了一个handleException方法。在断点的时候,我发现只进入了handleException中,未进入login方法?

请问是原因导致的?我应该怎么解决这种问题?

以下是我提供的截图:

【Java】我用spring boot实现了一个login接口,遇到的问题。

org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'otpcode' is not present

【Java】我用spring boot实现了一个login接口,遇到的问题。

【Java】我用spring boot实现了一个login接口,遇到的问题。

代码已更新到 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实现了参数必填验证拦截,并且优于方法体内的异常捕获

【Java】我用spring boot实现了一个login接口,遇到的问题。

要细心啊!!!! otpcode = optcode

可以理解这个异常的出现不是进入login触发的
而是在进入方法之前校验参数出现异常
所以进入了通用的异常拦截

其次 异常信息已经和明确了 你可以通过异常信息一眼看到

你的password是必传参数

以上是 【Java】我用spring boot实现了一个login接口,遇到的问题。 的全部内容, 来源链接: utcz.com/a/87312.html

回到顶部