나는 Spring이이 질문에 반드시 필요하다는 것을 지적해야하지만 Spring을 사용하는 동안이 문제가 발생하여 Spring의 상황을 사용합니다. 나는 이것을 만났다.문자열 배열 "상수"를 Spring에서 사용하기 @RequestMapping 값
특정 양식의 동일한 URL 집합에 GET
및 POST
요청에 대한 요청을 매핑하는 컨트롤러 클래스가 있습니다. 이 양식에는 각기 다른 로케일에 대한 URL이 있지만 양식의 컨트롤러 레벨 논리가 각 로케일 사이트마다 동일하기 때문에 GET
요청에 대해서는 하나의 방법 만 있고 POST
에 대해서는 하나의 방법 만 있습니다 (그러나 논리가 깊을수록, 로케일 별 유효성 검사와는 다를 수 있음). 예 :
@Controller
public class MyFormController {
// GET request
@RequestMapping(value={"/us-form.html", "/de-form.html", "/fr-form.html"},
method={RequestMethod.GET})
public String showMyForm() {
// Do some stuff like adding values to the model
return "my-form-view";
}
// POST request
@RequestMapping(value={"/us-form.html", "/de-form.html", "/fr-form.html"},
method={RequestMethod.POST})
public String submitMyForm() {
// Do stuff like validation and error marking in the model
return "my-form-view"; // Same as GET
}
}
형태 GET
및 POST
작품과 같이 작성하면 잘. @RequestMapping
값에 사용 된 String
배열이 동일한 것을 알 수 있습니다. 내가하고 싶은 일은 해당 URL을 하나의 자리 (이상적으로는 컨트롤러의 static final
입력란)에 넣는 것입니다. 그러면 나중에 URL이 추가 될 때 한 곳에서 추가 할 수 있습니다. 그래서 컨트롤러에이 수정을 시도 :
@Controller
public class MyFormController {
// Moved URLs up here, with references in @RequestMappings
private static final String[] MY_URLS =
{"/us-form.html", "/de-form.html", "/fr-form.html"};
// GET request
@RequestMapping(value=MY_URLS, // <-- considered non-constant
method={RequestMethod.GET})
public String showMyForm() {
// Do some stuff like adding values to the model
return "my-form-view";
}
// POST request
@RequestMapping(value=MY_URLS, // <-- considered non-constant
method={RequestMethod.POST})
public String submitMyForm() {
// Do stuff like validation and error marking in the model
return "my-form-view"; // Same as GET
}
}
여기서 문제는 컴파일러가 일정하게되고 더 이상 value
속성에 대해 불평하는 것이 없다. 나는 봄이 value
이 상수 여야한다는 것을 알고 있지만 리터럴을 포함하는 Array
리터럴을 사용하여 final
필드 (또는 제 경우에는 static final
)를 사용하면 "상수"로 전달할 수 있다고 생각했습니다. 제 생각에 여기서 배열 리터럴은 value
특성이 구문 분석 될 때 초기화되지 않는 방식으로 즉석에서 작성되어야합니다.
기본 Java 지식으로 파악하기가 어려워서는 안되는 것처럼 느껴지지만, 일부 연구 후에는 대답을 찾을 수 없었습니다. 누군가가 내 의혹을 확인하고 그 이유가 무엇인지에 대한 인용이나 좋은 설명을 주거나 의심을 부인하고 실제 문제가 무엇인지 설명 할 수 있습니까?
참고 : 각 양식 URL은 현지화 된 사이트의 언어이므로 URL을 Path Pattern으로 간단하게 조합 할 수 없으며 일치시킬 수 없습니다. 예를 들어, 위의 "/{locale}-form.html"문자열을 내 URL로 제공하기 만하면됩니다.
중복 가능한 [주석 속성 값 RequestMapping.value는 상수 표현식이어야합니다.] (http://stackoverflow.com/questions/14213723/the-value-for-annotation-attribute-requestmapping-value-must- be-a-constant-expre) – sp00m
@ sp00m 실제로 복제본 일 수 있습니다. 그것이 저와 같은 리터럴에 반대되는 방식의 반환 값을 사용하는 질문자 때문에 속은 사람인지 확실하지 않았습니다. – ajp15243