用java代码,写一个自定义注解,注解保存所有的请求参数
时间: 2024-03-17 14:47:20 浏览: 20
好的,我来为您提供一个示例代码:
首先,定义一个请求参数的注解类,如下所示:
```java
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface RequestParam {
String value() default "";
}
```
然后,在你的控制器方法上使用这个注解,如下所示:
```java
@RestController
public class UserController {
@GetMapping("/user")
public User getUser(@RequestParam("id") Long id,
@RequestParam("name") String name) {
// your code here
}
}
```
最后,我们使用反射来获取这个注解上的值,如下所示:
```java
import org.springframework.core.DefaultParameterNameDiscoverer;
import org.springframework.core.ParameterNameDiscoverer;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.lang.reflect.Method;
import java.util.Arrays;
@RestController
public class UserController {
@GetMapping("/user")
public User getUser(@RequestParam("id") Long id,
@RequestParam("name") String name) {
ParameterNameDiscoverer parameterNameDiscoverer = new DefaultParameterNameDiscoverer();
Method method = AnnotationDemoApplication.class.getMethod("getUser", Long.class, String.class);
String[] parameterNames = parameterNameDiscoverer.getParameterNames(method);
Arrays.stream(method.getParameters())
.forEach(parameter -> {
if (parameter.isAnnotationPresent(RequestParam.class)) {
RequestParam requestParam = AnnotationUtils.getAnnotation(parameter, RequestParam.class);
String paramName = requestParam.value();
if (paramName.isEmpty()) {
paramName = parameterNames[parameter.getParameterIndex()];
}
System.out.println(paramName + ": " + parameter.getName());
}
});
return new User(id, name);
}
}
```
这段代码会输出请求参数的名称和对应的参数值,如下所示:
```
id: id
name: name
```
这样,我们就完成了一个自定义注解,用来保存所有的请求参数。