0

次の単純な残りが定義されているとします。

@RequestMapping("/user/data")
@ResponseBody
public String getUserDetails(@RequestParam int id) {
    ...
}

コードの別の部分で問題のあるパス文字列を読み取る方法はありますか (つまり、まったく別の方法から) ? 何かのようなもの:

String restPath = SomeReflection.getPath("getuserdetails"); // received value: "/user/data"

WDYT? ありがとう!

解決しました! 必要な実装は次のとおりです。

public String getUrlFromRestMethod(Class controllerClass, String methodName) {

        try {
            Method method = controllerClass.getMethod(methodName);
            if (method != null && method.isAnnotationPresent(RequestMapping.class)) {

                RequestMapping requestMappingAnnotation = method.getAnnotation(RequestMapping.class);
                return requestMappingAnnotation.toString();
            }
        } catch (NoSuchMethodException e) {
            e.printStackTrace();//TODO
        }

        return null;
    }
4

3 に答える 3

2

別のクラスからでもプログラムでその値にアクセスしたい場合は、次の例から解決策を考え始めることができます。

    //get all methods defined in ClassA
    Method[] methods = ClassA.class.getMethods();
    for (Method m : methods) {
        //pick only the ones annotated with "@RequestMapping"
        if (m.isAnnotationPresent(RequestMapping.class)) {
            RequestMapping ta = m.getAnnotation(RequestMapping.class);
            System.out.println(ta.value()[0].toString());
        }
    }
于 2016-03-16T09:07:41.030 に答える
0

メソッドに HttpServletRequest リクエストを追加し、そこから request.getServletPath() に移動することをお勧めします

エイ

public String getUserDetails(HttpServletRequest request, @RequestParam int id) {

または、これがSpring http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-ann-requestmappingで行われる場合

@RequestMapping(path = "/{day}", method = RequestMethod.GET)
public Map<String, Appointment> getForDay(@PathVariable @DateTimeFormat(iso=ISO.DATE) Date day, Model model) {
    return appointmentBook.getAppointmentsForDay(day);
}
于 2016-03-16T08:52:51.670 に答える