春3.1を使っているが、私は自分の好奇心から少しサンプルプロジェクトを作成し、春が提供するMetadataReaderを少しいじっ。
@Controller
public class SomeAnnotatedController {
@RequestMapping(method = {RequestMethod.GET}, value = "/someUrl")
public void someMethod() {
// do something later
}
}
私は春MetadataReaderを使用して注釈から正しい情報を抽出することができませんでした。デモのために私はこのように見えた非常に単純なコントローラを作成しました。ネイティブJavaで同じことを
@Test
public void shouldReturnMethodArrayWithSpringMetadataReader() throws Exception {
MetadataReader metadataReader = new CachingMetadataReaderFactory().getMetadataReader(SomeAnnotatedController.class.getName());
Set<MethodMetadata> annotatedMethods = metadataReader.getAnnotationMetadata().getAnnotatedMethods(RequestMapping.class.getName());
assertEquals(1, annotatedMethods.size());
MethodMetadata methodMetadata = annotatedMethods.iterator().next();
assertEquals("someMethod", methodMetadata.getMethodName());
Map<String, Object> annotationAttributes = methodMetadata.getAnnotationAttributes(RequestMapping.class.getName());
assertTrue(annotationAttributes.containsKey("method"));
RequestMethod[] methodAttribute = (RequestMethod[]) annotationAttributes.get("method");
assertEquals(1, methodAttribute.length);
}
このテストを実行すると、最後の行に失敗し、これは空の配列であることを示しています...
java.lang.AssertionError:
Expected :1
Actual :0
は少し簡単に感じているし、正しい情報を返します。 。
@Test
public void shouldReturnMethodArrayWithPlainJava() throws Exception {
Method method = SomeAnnotatedController.class.getDeclaredMethod("someMethod");
RequestMapping annotation = method.getAnnotation(RequestMapping.class);
assertEquals(1, annotation.method().length);
assertEquals(RequestMethod.GET, annotation.method()[0]);
}
だから、私は問題の解決策を見つけられませんでしたが、おそらくサンプルプロジェクトまたはプレーンJavaに基づいて文書の代替が役立つかもしれないということを教えてくれて申し訳ありません。
ただし、メソッドフィールドは常に空ですか?記述する –
編集部分を参照してください –
@RequestMappingアノテーションのメソッド属性の型がRequestMethodの配列であるため、MetadataReaderの作業(コーディング)がわからない場合、オブジェクト情報を取得する方法が他にあるかどうかを確認してください。すなわちRequestMethod [] –