bestsource

스프링을 사용하여 옵션 경로 변수를 만들 수 있습니까?

bestsource 2023. 2. 28. 23:40
반응형

스프링을 사용하여 옵션 경로 변수를 만들 수 있습니까?

Spring 3.0에서는 옵션 경로 변수를 사용할 수 있습니까?

예를들면

@RequestMapping(value = "/json/{type}", method = RequestMethod.GET)
public @ResponseBody TestBean testAjax(
        HttpServletRequest req,
        @PathVariable String type,
        @RequestParam("track") String track) {
    return new TestBean();
}

여기 있습니다./json/abc또는/json같은 메서드를 호출합니다.
명백한 회피책 선언 1개type요구 파라미터로서 다음과 같이 입력합니다.

@RequestMapping(value = "/json", method = RequestMethod.GET)
public @ResponseBody TestBean testAjax(
        HttpServletRequest req,
        @RequestParam(value = "type", required = false) String type,
        @RequestParam("track") String track) {
    return new TestBean();
}

그리고 나서./json?type=abc&track=aa또는/json?track=rr동작할 것이다

옵션 패스 변수는 사용할 수 없지만, 같은 서비스 코드를 호출하는2개의 컨트롤러 메서드를 사용할 수 있습니다.

@RequestMapping(value = "/json/{type}", method = RequestMethod.GET)
public @ResponseBody TestBean typedTestBean(
        HttpServletRequest req,
        @PathVariable String type,
        @RequestParam("track") String track) {
    return getTestBean(type);
}

@RequestMapping(value = "/json", method = RequestMethod.GET)
public @ResponseBody TestBean testBean(
        HttpServletRequest req,
        @RequestParam("track") String track) {
    return getTestBean();
}

Spring 4.1 및 Java 8을 사용하는 경우java.util.Optional이는 에서 지원되고 있습니다.@RequestParam,@PathVariable,@RequestHeader그리고.@MatrixVariable봄 MVC -

@RequestMapping(value = {"/json/{type}", "/json" }, method = RequestMethod.GET)
public @ResponseBody TestBean typedTestBean(
    @PathVariable Optional<String> type,
    @RequestParam("track") String track) {      
    if (type.isPresent()) {
        //type.get() will return type value
        //corresponds to path "/json/{type}"
    } else {
        //corresponds to path "/json"
    }       
}

@PathVariable 주석을 사용하여 경로 변수 맵을 삽입할 수도 있다는 사실은 잘 알려져 있지 않습니다.이 기능을 Spring 3.0에서 사용할 수 있는지, 나중에 추가된 것인지 알 수 없지만, 이 예제를 해결하는 다른 방법이 있습니다.

@RequestMapping(value={ "/json/{type}", "/json" }, method=RequestMethod.GET)
public @ResponseBody TestBean typedTestBean(
    @PathVariable Map<String, String> pathVariables,
    @RequestParam("track") String track) {

    if (pathVariables.containsKey("type")) {
        return new TestBean(pathVariables.get("type"));
    } else {
        return new TestBean();
    }
}

를 사용할 수 있습니다.

@RequestParam(value="somvalue",required=false)

pathVariable이 아닌 옵션 파라미터의 경우

Spring 5 / Spring Boot 2의 예:

막는

@GetMapping({"/dto-blocking/{type}", "/dto-blocking"})
public ResponseEntity<Dto> getDtoBlocking(
        @PathVariable(name = "type", required = false) String type) {
    if (StringUtils.isEmpty(type)) {
        type = "default";
    }
    return ResponseEntity.ok().body(dtoBlockingRepo.findByType(type));
}

반응성

@GetMapping({"/dto-reactive/{type}", "/dto-reactive"})
public Mono<ResponseEntity<Dto>> getDtoReactive(
        @PathVariable(name = "type", required = false) String type) {
    if (StringUtils.isEmpty(type)) {
        type = "default";
    }
    return dtoReactiveRepo.findByType(type).map(dto -> ResponseEntity.ok().body(dto));
}

Nicolai Ehmann의 코멘트와 wildloop의 회답의 간단한 예(Spring 4.3.3+와 연동)는 기본적으로 사용할 수 있습니다.required = false지금 바로:

  @RequestMapping(value = {"/json/{type}", "/json" }, method = RequestMethod.GET)
  public @ResponseBody TestBean testAjax(@PathVariable(required = false) String type) {
    if (type != null) {
      // ...
    }
    return new TestBean();
  }

이 Spring 3 WebMVC - Optional Path Variables를 확인합니다.옵션 경로 변수를 활성화하기 위해 AntPathMatcher를 확장하는 방법에 대한 문서를 보여 줍니다.기사 투고에 대해 세바스찬 헤럴드에게 모든 공로를 돌렸다.

다음은 Beldung의 레퍼런스 페이지에서 바로 나온 답변이다:- https://www.baeldung.com/spring-optional-path-variables

폴 워드리프에게 고맙다고 전해주세요.

@RequestMapping(value={ "/calificacion-usuario/{idUsuario}/{annio}/{mes}", "/calificacion-usuario/{idUsuario}" }, method=RequestMethod.GET)
public List<Calificacion> getCalificacionByUsuario(@PathVariable String idUsuario
        , @PathVariable(required = false) Integer annio
        , @PathVariable(required = false) Integer mes) throws Exception {
    return repositoryCalificacion.findCalificacionByName(idUsuario, annio, mes);
}
$.ajax({
            type : 'GET',
            url : '${pageContext.request.contextPath}/order/lastOrder',
            data : {partyId : partyId, orderId :orderId},
            success : function(data, textStatus, jqXHR) });

@RequestMapping(value = "/lastOrder", method=RequestMethod.GET)
public @ResponseBody OrderBean lastOrderDetail(@RequestParam(value="partyId") Long partyId,@RequestParam(value="orderId",required=false) Long orderId,Model m ) {}

언급URL : https://stackoverflow.com/questions/4904092/with-spring-can-i-make-an-optional-path-variable

반응형