首页 新闻 会员 周边

springmvc接口的参数怎么定义更好?

0
悬赏园豆:20 [待解决问题]
     以下demo类中使用不同参数类型接收一个参数,需要达到的效果是:进行参数校验,并友好地提示给调用方,避免500错误的出现。
用方法getString4能解决,还有更好的方式吗? 大家是怎么解决这类问题的?求指点。
@RequestMapping("/demo")
@RestController
public class DemoController {

/**
* 使用整型int传参
* 优点:基本类型传参,无类型转换问题
* 缺点:未传值,或传入非整数时报错(500)
*/
@RequestMapping(value = "/getstring1")
@ResponseBody
public String getString1(int id) {
if (id <= 0) {
return "id参数必填,且id需大于0.";
}

return "正确结果";
}

@RequestMapping(value = "/getstring2")
@ResponseBody
/**
* 使用整型int传参,加参数注解
* 优点:使用值类型传参,能解决未传值的校验问题
* 缺点:传入非整型数字时错误(500),且需要做参数注解(RequestParam)
*/
public String getString2(@RequestParam(defaultValue = "0", name = "id", required = false) int id) {
if (id <= 0) {
return "id参数必填,且id需大于0.";
}

return "正确结果";
}

@RequestMapping(value = "/getstring3")
@ResponseBody
/**
* 使用整型包装类传参Integer
* 优点:参数不传值(即null的场景)能正常提示错误,不用类型转换
* 缺点:使用的是包装(引用)类型;id参数输入是非整型数字时接口报500
*/
public String getString3(Integer id) {
if (id == null
|| id <= 0) {
return "id参数必填,且id需大于0.";
}

return "正确结果";
}

/**
* 优点:这种方式能解决非整数的输入的验证以及null的验证
* 缺点:使用包装类型,且需要做类型转换
*/
@RequestMapping(value = "/getstring4")
@ResponseBody
public String getString4(String id) {
if (id == null) {
return "id参数必填";
} else {
int id1 = 0;
try {
id1 = Integer.parseInt(id);
} catch (NumberFormatException e) {
// 不做处理
}
if (id1 <= 0) {
return "id参数必填,且id需大于0.";
}
}

return "正确结果";
}
}
Wang Juqiang的主页 Wang Juqiang | 初学一级 | 园豆:182
提问于:2017-12-05 10:14
< >
分享
所有回答(1)
0

https://www.cnblogs.com/HD/p/4123146.html 给你搜了下.

关键字 spring mvc model校验/验证

吴瑞祥 | 园豆:29449 (高人七级) | 2017-12-05 10:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册