복붙노트

[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. ==============================

    1.선택적으로 만들 수는 없지만 @RequestMapping ({ "customer"}) 주석이있는 메소드와 @RequestMapping ({ "customer / {id}"})을 갖는 메소드로 두 가지 메소드를 생성 한 다음 마다.

    선택적으로 만들 수는 없지만 @RequestMapping ({ "customer"}) 주석이있는 메소드와 @RequestMapping ({ "customer / {id}"})을 갖는 메소드로 두 가지 메소드를 생성 한 다음 마다.

  2. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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;
    

    }

  6. 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