@WebParam 关于接口方法的参数 - 如何获取名称?
@WebParam on a parameter of interface method - how to get name?
我尝试获取接口方法中方法参数 User user
上注释 @WebParam 的名称 "best_user"
。因为是接口,所以下面的代码不让我访问注解:
String methodName = "doSomething";
Class<?> clazz = Class.forName(packageName + "." + "UserService");
Method serviceMethod = null;
for (Method method: clazz.getMethods())
{
if (method.getName().equals(methodName))
{
serviceMethod = method;
break;
}
}
Class<?>[] parameterTypes = serviceMethod.getParameterTypes();
WebParam webParam = parameterTypes[0].getAnnotation(WebParam.class); //webParam is null
String parameterName = webParam.name();
但是 Web 服务框架能够获取此数据。我该怎么做?
接口:
@WebService(name = "UserService", targetNamespace = "my.targetNamespace")
public interface UserService {
@WebMethod
public String doSomething
(
@WebParam(name = "best_user")
User user
)
}
这不是接口类型的限制。
Method#getParameterTypes()
returns 参数类型数组。在您的示例中,它只包含一个 User.class
,因为您的方法有一个 User
.
类型的参数
您需要使用 Method#getParameterAnnotations()
并获取第一个参数的第一个注释。
Annotation[][] parameterTypes = serviceMethod.getParameterAnnotations();
WebParam webParam = (WebParam) parameterTypes[0][0];
因为Java8,你也可以使用Method#getParameters()
and Parameter#getAnnotation()
WebParam webParam = serviceMethod.getParameters()[0].getAnnotation(WebParam.class);
我尝试获取接口方法中方法参数 User user
上注释 @WebParam 的名称 "best_user"
。因为是接口,所以下面的代码不让我访问注解:
String methodName = "doSomething";
Class<?> clazz = Class.forName(packageName + "." + "UserService");
Method serviceMethod = null;
for (Method method: clazz.getMethods())
{
if (method.getName().equals(methodName))
{
serviceMethod = method;
break;
}
}
Class<?>[] parameterTypes = serviceMethod.getParameterTypes();
WebParam webParam = parameterTypes[0].getAnnotation(WebParam.class); //webParam is null
String parameterName = webParam.name();
但是 Web 服务框架能够获取此数据。我该怎么做?
接口:
@WebService(name = "UserService", targetNamespace = "my.targetNamespace")
public interface UserService {
@WebMethod
public String doSomething
(
@WebParam(name = "best_user")
User user
)
}
这不是接口类型的限制。
Method#getParameterTypes()
returns 参数类型数组。在您的示例中,它只包含一个 User.class
,因为您的方法有一个 User
.
您需要使用 Method#getParameterAnnotations()
并获取第一个参数的第一个注释。
Annotation[][] parameterTypes = serviceMethod.getParameterAnnotations();
WebParam webParam = (WebParam) parameterTypes[0][0];
因为Java8,你也可以使用Method#getParameters()
and Parameter#getAnnotation()
WebParam webParam = serviceMethod.getParameters()[0].getAnnotation(WebParam.class);