[SPRING] 스프링 MVC : 경로 변수가 필요한지 여부를 나타내는 방법?
SPRING스프링 MVC : 경로 변수가 필요한지 여부를 나타내는 방법?
Spring Web을하고 있습니다. 컨트롤러 메소드의 경우 RequestParam을 사용하여 필수 매개 변수인지 여부를 나타낼 수 있습니다. 예 :
@RequestMapping({"customer"})
public String surveys(HttpServletRequest request,
@RequestParam(value="id", required = false) Long id,
Map<String, Object> map)
다음과 같은 PathVariable을 사용하고 싶습니다.
@RequestMapping({"customer/{id}"})
public String surveys(HttpServletRequest request,
@PathVariable("id") Long id,
Map<String, Object> map)
경로 변수가 필요한지 여부를 어떻게 나타낼 수 있습니까? 새 객체를 만들 때 저장 될 때까지 사용할 수있는 연결된 ID가 없기 때문에 선택적으로 만들 필요가 있습니다.
도와 주셔서 감사합니다!
해결법
-
==============================
1.선택적으로 만들 수는 없지만 @RequestMapping ({ "customer"}) 주석이있는 메소드와 @RequestMapping ({ "customer / {id}"})을 갖는 메소드로 두 가지 메소드를 생성 한 다음 마다.
선택적으로 만들 수는 없지만 @RequestMapping ({ "customer"}) 주석이있는 메소드와 @RequestMapping ({ "customer / {id}"})을 갖는 메소드로 두 가지 메소드를 생성 한 다음 마다.
-
==============================
2.VTTom의 솔루션이 맞습니다. "value"변수를 배열로 바꾸고 모든 url 가능성을 나열하십시오 : value = { "/", "/ {id}"}
VTTom의 솔루션이 맞습니다. "value"변수를 배열로 바꾸고 모든 url 가능성을 나열하십시오 : value = { "/", "/ {id}"}
@RequestMapping(method=GET, value={"/", "/{id}"}) public void get(@PathVariable Optional<Integer> id) { if (id.isPresent()) { id.get() //returns the id } }
-
==============================
3.나는 이것이 낡은 질문이지만, "선택적 경로 변수"를 찾는 것은이 대답이 높기 때문에 Java 4.1을 사용하는 Spring 4.1이 java.util.Optional 클래스를 사용하여 가능하다는 것을 지적 할 가치가 있다고 생각했습니다.
나는 이것이 낡은 질문이지만, "선택적 경로 변수"를 찾는 것은이 대답이 높기 때문에 Java 4.1을 사용하는 Spring 4.1이 java.util.Optional 클래스를 사용하여 가능하다는 것을 지적 할 가치가 있다고 생각했습니다.
예를 들어 (값이 일치해야하는 모든 잠재적 경로를 나열해야합니다 (즉, ID 경로 변수가있는 경우와없는 경우). @martin-cmarko를 가리키는 Props가이를 나타냅니다.)
@RequestMapping(method=GET, value={"/", "/{id}"}) public void get(@PathVariable Optional<Integer> id) { if (id.isPresent()) { id.get() //returns the id } }
-
==============================
4.VTToms 응답은 경로상의 ID없이 일치하지 않으므로 (즉, 해당 HandlerMapping을 찾지 못함) 응답하지 않으므로 컨트롤러가 히트되지 않습니다. 오히려 당신은 할 수 있습니다 -
VTToms 응답은 경로상의 ID없이 일치하지 않으므로 (즉, 해당 HandlerMapping을 찾지 못함) 응답하지 않으므로 컨트롤러가 히트되지 않습니다. 오히려 당신은 할 수 있습니다 -
@RequestMapping({"customer/{id}","customer"}) public String surveys(HttpServletRequest request, @PathVariable Map<String, String> pathVariablesMap, Map<String, Object> map) { if (pathVariablesMap.containsKey("id")) { //corresponds to path "customer/{id}" } else { //corresponds to path "customer" } }
다른 사람들이 언급 한 java.util.Optional을 사용할 수도 있지만, Spring 4.1 이상과 Java 1.8이 필요합니다.
-
==============================
5.'Optional'(@ PathVariable Optional id) 또는 Map (@PathVariable Map pathVariables)을 사용하는 데 문제가 있습니다. 컨트롤러 메소드를 호출하여 HATEOAS 링크를 만들려고 시도하면 Spring-hateoas가 미리 보이기 때문에 실패합니다 java8이며 '선택 사항'을 지원하지 않습니다. 또한 @PathVariable Map 주석을 사용하여 메서드를 호출 할 수 없습니다.
'Optional'(@ PathVariable Optional id) 또는 Map (@PathVariable Map pathVariables)을 사용하는 데 문제가 있습니다. 컨트롤러 메소드를 호출하여 HATEOAS 링크를 만들려고 시도하면 Spring-hateoas가 미리 보이기 때문에 실패합니다 java8이며 '선택 사항'을 지원하지 않습니다. 또한 @PathVariable Map 주석을 사용하여 메서드를 호출 할 수 없습니다.
다음은 Map의 실패를 보여주는 예입니다.
@RequestMapping(value={"/subs","/masterclient/{masterclient}/subs"}, method = RequestMethod.GET) public List<Jobs> getJobListTest( @PathVariable Map<String, String> pathVariables, @RequestParam(value="count", required = false, defaultValue = defaultCount) int count) { if (pathVariables.containsKey("masterclient")) { System.out.println("Master Client = " + pathVariables.get("masterclient")); } else { System.out.println("No Master Client"); } //Add a Link to the self here. List list = new ArrayList<Jobs>(); list.add(linkTo(methodOn(ControllerJobs.class).getJobListTest(pathVariables, count)).withSelfRel()); return list;
}
from https://stackoverflow.com/questions/17821731/spring-mvc-how-to-indicate-whether-a-path-variable-is-required-or-not by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] @Autowired Map을 만들 수 있습니까? (0) | 2019.02.01 |
---|---|
[SPRING] <context : include-filter>와 <context : exclude-filter>는 Spring에서 어떻게 작동합니까? (0) | 2019.02.01 |
[SPRING] spring-boot-startter-web을 사용하여 "수용 가능한 표현을 찾을 수 없습니다" (0) | 2019.02.01 |
[SPRING] JPA는 분리 된 객체를 삭제한다고 생각합니다. (0) | 2019.02.01 |
[SPRING] @Component로 클래스에 주석을 달 때 Spring Bean과 Singleton을 의미합니까? (0) | 2019.02.01 |