不加@Param为什么报错
时间: 2024-06-05 20:09:28 浏览: 93
在Java中,当我们调用一个方法时,如果该方法有参数,我们需要在调用时将参数传递给方法,否则会报错。如果方法定义时没有参数,我们在调用时也不需要传递参数,否则会被视为语法错误。因此,在不加@Param注解的情况下,如果你没有传递参数,就会报错。而加上@Param注解后,即使你没有传递参数,编译器也会知道你的意图是调用该方法,并且不需要参数。
相关问题
openfeign 加了RequestParam 为什么还是报错RequestParam.value() was empty on parameter 0
这个错误提示是因为你在使用OpenFeign调用远程服务时,参数使用了@RequestParam注解,但是@RequestParam注解中的value值为空。@RequestParam注解中的value值是必须要填写的,它表示参数名,如果不填写value值,就会出现这个错误提示。
解决这个问题的方法是在@RequestParam注解中填写value值,例如:
```
public void testFeign(@RequestParam(value = "param1") String param1) {
// 方法体
}
```
在这个例子中,我们在@RequestParam注解中填写了value值“param1”,表示参数名为“param1”,这样就不会出现“RequestParam.value() was empty on parameter 0”的错误提示了。
用java的自定义注解实现判断请求参数是否为空从而进行报错
可以通过使用自定义注解和拦截器来实现判断请求参数是否为空,并进行报错提示。具体实现步骤如下:
1. 定义一个注解 `@ParamNotNull`,用于表示该参数不能为空,代码如下:
```java
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface ParamNotNull {
String value() default "";
}
```
2. 定义一个拦截器 `ParamNotNullInterceptor`,用于拦截请求,并判断参数是否为空,代码如下:
```java
public class ParamNotNullInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 获取请求参数列表
Object[] params = ((HandlerMethod) handler).getMethod().getParameters();
for (Object param : params) {
// 判断参数是否加了@ParamNotNull注解
if (param instanceof ServletRequest || param instanceof ServletResponse || param.getClass().isPrimitive() || !param.getClass().isAnnotationPresent(ParamNotNull.class)) {
continue;
}
// 获取参数名
String paramName = ((MethodParameter) param).getParameterName();
// 获取参数值
Object paramValue = request.getParameter(paramName);
// 判断参数值是否为空
if (StringUtils.isEmpty(paramValue)) {
// 报错提示
throw new IllegalArgumentException(paramName + " can not be null");
}
}
return true;
}
}
```
3. 在需要进行参数校验的Controller方法上,加上 `@ParamNotNull` 注解,代码如下:
```java
@PostMapping("/test")
public String test(@ParamNotNull String name) {
return "hello " + name;
}
```
4. 配置拦截器,将 `ParamNotNullInterceptor` 添加到拦截器链中,代码如下:
```java
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new ParamNotNullInterceptor());
}
}
```
这样,当请求参数为空时,会抛出 `IllegalArgumentException` 异常,并提示参数不能为空。
阅读全文
相关推荐
















