@NotNull@NotBlank@Valid在spring引导rest api验证中不起作用
@NotNull、@NotEmpty、@NotBlank注释在我的rest控制器中不起作用。我的要求是限制控制器的流量,当我在没有必要参数的情况下点击控制器时,会出现400错误。但当我将null或空头传递给我的控制器时,我并没有得到400错误。我的控制器点击我的处理程序类,这不是预期的行为 下面是我的控制器@NotNull@NotBlank@Valid在spring引导rest api验证中不起作用,spring,spring-boot,rest,spring-mvc,Spring,Spring Boot,Rest,Spring Mvc,@NotNull、@NotEmpty、@NotBlank注释在我的rest控制器中不起作用。我的要求是限制控制器的流量,当我在没有必要参数的情况下点击控制器时,会出现400错误。但当我将null或空头传递给我的控制器时,我并没有得到400错误。我的控制器点击我的处理程序类,这不是预期的行为 下面是我的控制器 @RestController @RequestMapping("/intelligent-banking") public class CrossSellOffersRetrievalCo
@RestController
@RequestMapping("/intelligent-banking")
public class CrossSellOffersRetrievalController {
@Autowired
private CrossSellOffersRetrievalHandler crossSellOffersRetrievalHandler;
@Autowired
Environment env;
@GetMapping(value = "/cross-sell-offers/{interactionPoint}", produces = { MediaType.APPLICATION_JSON_VALUE })
public ResponseEntity<CrossSellOffersRetrievalResponse> getApplicableOffers(
@RequestHeader(value = "channelId", required = true) @Valid String channelId,
@RequestHeader(value = "clientId", required = false) String clientId,
@RequestHeader(value = "actionId", required = true) @NotNull @NotEmpty String actionId,
@RequestHeader(value = "customerId", required = true) @NotNull @NotBlank String customerId,
@RequestHeader(value = "cinSuffix", required = true) @NotNull @NotBlank String cinSuffix,
@RequestHeader(value = "sessionId", required = true) @NotNull @NotBlank String sessionId,
@RequestHeader(value = "countryCode", required = true) @NotNull @NotBlank String countryCode,
@PathVariable(value = "interactionPoint", required = true) @NotNull @NotBlank String interactionPoint,
@RequestParam(value = "numberOfOffers", required = false) Integer numberOfOffers)
throws CrossSellOffersException {
try {
CrossSellOffersRetrievalResponse crossSellOffersResponse = crossSellOffersRetrievalHandler.getCrossSellOffersRetrievalResponse(channelId,
customerId, cinSuffix, countryCode, interactionPoint, sessionId, numberOfOffers);
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.set("CustomerId", customerId);
return new ResponseEntity<>(crossSellOffersResponse, httpHeaders, HttpStatus.OK);
}
catch (Exception e) {
LOGGER.error("Inside CrossSellOffersRetrievalController::getApplicableOffers::Exception - Exception occurred at getApplicableOffers: {} ",e.getMessage());
throw new CrossSellOffersException(Constants.ERROR_CODE, e.getMessage());
}
}
}
@RestController
@请求映射(“/智能银行”)
公共类CrossSellOfferRetrievalController{
@自动连线
私有CrossSellOfferRetrievalHandler CrossSellOfferRetrievalHandler;
@自动连线
环境环境;
@GetMapping(value=“/cross-sell-offers/{interactionPoint}”,products={MediaType.APPLICATION\u-JSON\u-value})
公共响应获得适用的优惠(
@RequestHeader(value=“channelId”,required=true)@有效字符串channelId,
@RequestHeader(value=“clientId”,required=false)字符串clientId,
@RequestHeader(value=“actionId”,required=true)@NotNull@NotEmpty String actionId,
@RequestHeader(value=“customerId”,required=true)@NotNull@NotBlank字符串customerId,
@RequestHeader(value=“cinSuffix”,required=true)@NotNull@NotBlank字符串cinSuffix,
@RequestHeader(value=“sessionId”,required=true)@NotNull@NotBlank字符串sessionId,
@RequestHeader(value=“countryCode”,required=true)@NotNull@NotBlank字符串countryCode,
@PathVariable(value=“interactionPoint”,required=true)@NotNull@NotBlank字符串interactionPoint,
@RequestParam(value=“numberOfOffers”,required=false)整数numberOfOffers)
抛出CrossSellOfferException{
试一试{
CrossSellOfferRetrievalResponse CrossSellOfferResponse=CrossSellOfferRetrievalHandler.GetCrossSellOfferRetrievalResponse(channelId,
customerId、cinSuffix、countryCode、interactionPoint、sessionId、numberOfOffers);
HttpHeaders HttpHeaders=新的HttpHeaders();
httpHeaders.set(“CustomerId”,CustomerId);
返回新的ResponseEntity(CrossSellOfferResponse、httpHeaders、HttpStatus.OK);
}
捕获(例外e){
LOGGER.error(“CrossSellOfferRetrievalController::GetApplicatableOffers::Exception内部-GetApplicatableOffers:{}”发生异常,e.getMessage());
抛出新的CrossSellOfferException(Constants.ERROR_代码,例如getMessage());
}
}
}
您需要通过向控制器添加@Validated
注释来启用请求参数和路径变量的验证,以便执行验证。您需要通过依次向控制器添加@Validated
注释来启用请求参数和路径变量的验证用于执行验证。使用此maven依赖项以使其正常工作
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>2.3.2.RELEASE</version>
</dependency>
org.springframework.boot
弹簧启动启动器验证
2.3.2.2发布
使用此maven依赖项以使其正常工作
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>2.3.2.RELEASE</version>
</dependency>
org.springframework.boot
弹簧启动启动器验证
2.3.2.2发布
在spring boot中使用了此验证依赖项,但由于spring boot的版本升级到2.4.0,因此无法工作
javax.validation
验证api
2.0.1.最终版本
用spring boot starter验证替换了它,它工作了。
org.springframework.boot
弹簧启动启动器验证
2.4.0
需要通过向控制器添加@Validated注释来启用请求参数和路径变量的验证,以便执行验证。
在spring boot中使用了此验证依赖项,但由于spring boot的版本升级到2.4.0,因此无法工作
javax.validation
验证api
2.0.1.最终版本
用spring boot starter验证替换了它,它工作了。
org.springframework.boot
弹簧启动启动器验证
2.4.0
需要通过向控制器添加@Validated注释来启用请求参数和路径变量的验证,以便执行验证。
检查这是否有帮助:。很可能是hibernate-validator.jar未正确引用。将spring boot starter验证添加为依赖项。因为从Spring Boot 2.3.0起不再包含该功能(或者您手动包含依赖项而不是启动器,并且没有实现)。请检查这是否有帮助:。很可能是hibernate-validator.jar未正确引用。将spring boot starter验证添加为依赖项。因为从SpringBoot2.3.0开始,它就不再包含了(或者您手动包含依赖项而不是启动器,并且没有实现)。