springframework를 사용하기 전 우선 java 8에서 method의 parameterName을 generic으로 구할 수 있는가에 대해 알아보자.
우선 java 에서 generic으로 다음과 같이 parameter name을 구할 수 있다.
String name = String.class.getMethod("substring", int.class).getParameters()[0].getName()
System.out.println(name);
하지만 막상 획득해보면 원래 이름이 아닌 arg0, arg1, arg2 ... 와 같은 이름으로 반환된다.
java 가 컴파일 시 이름에 대해 메모리 공간을 낭비하지 않기 위해 이와 같이 통일된 값으로 변환하여 사용하기 때문이다.
이를 원래 parameter name으로 사용하고자 하는 경우 vm 옵션으로 -parameters 를 사용하면 된다.
Spring에서는 parameter name을 사용하여 외부 요청의 key 값을 매핑하고 있기 때문에 이에 대해 저장, 관리를 하고 있다.
이를 사용하기 위해 ParameterNameDiscoverer 를 제공하고 있다.
다음과 같이 사용하면 된다.
private static DefaultParameterNameDiscoverer discoverer = new DefaultParameterNameDiscoverer();
String[] parameterNames = discoverer.getParameterNames(method);