@RequestMapping(value =“ v1 / firewall / policy / {zoneId:。* \\ D +。*}”)有什么作用?

时间:2018-09-10 21:09:42

标签: java rest spring-boot

我在理解以下Rest终结点正在做什么时遇到了很多麻烦-更具体地说,value = "v1/firewall/policy/{zoneId:.*\\D+.*}"部分:

   @RequestMapping(
        method = {RequestMethod.PUT, RequestMethod.POST},
        value = "/v1/firewall/policy/{zoneId:.*\\D+.*}",
        headers = "Accept=application/json"
)
public ResponseEntity post_policy(@RequestBody InformationPolicy informationPolicy,
                                  @RequestHeader("deployment-id") String deploymentId) {

    someService.process(policyInformation, deploymentId);

    return createResponse(new RestStatus(HttpStatus.OK));

}

我知道我应该为"{zoneId:.*\\D+.*}"传递一些值,我只是从未见过(zoneId:.*\\D+.*)之前的格式-这到底是什么?

1 个答案:

答案 0 :(得分:2)

冒号后的部分是正则表达式。 \D的意思是“非数字”,因此zodeid部分必须包含一个非数字,即

OK:     /v1/firewall/policy/12X
Not OK: /v1/firewall/policy/123

仅供参考,+的意思是“至少一个”,因为一个是至少一个,因此不会产生任何影响。

顺便说一句,我上一次尝试,如果要在值中使用点,则必须使用允许点的正则表达式,例如field:.*,因为默认行为是不允许点。