스프링을 사용하여 옵션 경로 변수를 만들 수 있습니까?
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
'bestsource' 카테고리의 다른 글
Angular js - 모든 $http()가 완료되었음을 감지합니다. (0) | 2023.03.05 |
---|---|
AngularJS에서 ng-repeat 스크롤 위치를 유지하는 방법은 무엇입니까? (0) | 2023.03.05 |
ASP를 사용하는 Jquery AJAX.페이지 전체를 반환하는 NET Web Method (0) | 2023.02.28 |
일치하지 않는 경우 sed 값 반환 (0) | 2023.02.28 |
PL/SQL 날짜에서 일수 빼기 (0) | 2023.02.28 |