以下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 "正确结果";
}
}
https://www.cnblogs.com/HD/p/4123146.html 给你搜了下.
关键字 spring mvc model校验/验证