Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot RestController中的映射键无法验证_Spring Boot_Kotlin_Bean Validation - Fatal编程技术网

Spring boot RestController中的映射键无法验证

Spring boot RestController中的映射键无法验证,spring-boot,kotlin,bean-validation,Spring Boot,Kotlin,Bean Validation,使用Spring Boot 2.2.6,给定此控制器: @RestController @验证 类MyController{ @GetMapping(“foo”) 有趣的固件版本差异( @RequestParam@Valid versions:@Valid Map< @模式(regexp=“a | b | c”) 字符串,字符串> ):字符串{ // … } } 我希望请求foo?d=any抛出一个ConstraintViolationException,但控制器是正常调用的 我的上下文中有一

使用Spring Boot 2.2.6,给定此控制器:

@RestController
@验证
类MyController{
@GetMapping(“foo”)
有趣的固件版本差异(
@RequestParam@Valid versions:@Valid Map<
@模式(regexp=“a | b | c”)
字符串,字符串>
):字符串{
// …
}
}
我希望请求
foo?d=any
抛出一个
ConstraintViolationException
,但控制器是正常调用的

我的上下文中有一个
MethodValidationPostProcessor
,它可以用于其他验证。如果我将RequestParam更改为installedfirmwarevervision:String
@RequestParam@Valid@Length(min=3),它将正常工作


我遗漏了什么?

也许我的答案不是对您正在寻找的答案的更正,但它肯定会检查您试图在控制器中执行的验证

import in.silentsudo.validators.annotations.RequestMap;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.Map;

public class MapParamValidator implements ConstraintValidator<RequestMap, Map<String, String>> {

    @Override
    public boolean isValid(Map<String, String> stringStringMap, ConstraintValidatorContext constraintValidatorContext) {
        return stringStringMap.containsKey("a") || stringStringMap.containsKey("c") || stringStringMap.containsKey("b");
    }
}

如果一切顺利,你应该得到这样的东西

There was an unexpected error (type=Internal Server Error, status=500).
getFirmwareVersionDifference.versions: Invalid Request Map
javax.validation.ConstraintViolationException: getFirmwareVersionDifference.versions: Invalid Request Map
...

也许我的答案不是对您正在寻找的答案的更正,但它肯定会检查您试图在控制器中执行的验证

import in.silentsudo.validators.annotations.RequestMap;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.Map;

public class MapParamValidator implements ConstraintValidator<RequestMap, Map<String, String>> {

    @Override
    public boolean isValid(Map<String, String> stringStringMap, ConstraintValidatorContext constraintValidatorContext) {
        return stringStringMap.containsKey("a") || stringStringMap.containsKey("c") || stringStringMap.containsKey("b");
    }
}

如果一切顺利,你应该得到这样的东西

There was an unexpected error (type=Internal Server Error, status=500).
getFirmwareVersionDifference.versions: Invalid Request Map
javax.validation.ConstraintViolationException: getFirmwareVersionDifference.versions: Invalid Request Map
...

这是kotlin编译器的错误/缺失功能:

如本文所述,kotlin 1.3.70部分解决了这一问题

下面是如何在
build.gradle.kts

tasks.withType{
科特洛普斯酒店{
freeCompilerArgs=listOf(“-Xemit jvm类型注释”)
jvmTarget=“11”//至少8个应该可以工作,我只测试了11个
}
}

这是kotlin编译器的错误/缺少的功能:

如本文所述,kotlin 1.3.70部分解决了这一问题

下面是如何在
build.gradle.kts

tasks.withType{
科特洛普斯酒店{
freeCompilerArgs=listOf(“-Xemit jvm类型注释”)
jvmTarget=“11”//至少8个应该可以工作,我只测试了11个
}
}

谢谢您的回答!半天之后,我才发现问题:这是kotlin编译器的一个bug/缺少的特性普通的java太棒了!也会是我的选择;)谢谢你的回答!半天之后,我才发现问题:这是kotlin编译器的一个bug/缺少的特性普通的java太棒了!也会是我的选择;)对我来说仍然不起作用,至少在测试中代码仍然没有验证。Kotlin版本是1.4.21。仅适用于@field:…请看,对我来说仍然不起作用,至少在测试中,代码仍然无法验证。Kotlin版本是1.4.21。仅适用于@field:…请参见
There was an unexpected error (type=Internal Server Error, status=500).
getFirmwareVersionDifference.versions: Invalid Request Map
javax.validation.ConstraintViolationException: getFirmwareVersionDifference.versions: Invalid Request Map
...