标有@AssertTrue的方法不会被调用

gstackoverflow:

我有以下课程要验证:

@Document(collection = "settings")
public class Settings {
    @NotEmpty
    private String[] allowableExtensions;
    ...
    @AssertTrue(message = "Each extension must be alphanumeric string with length {2,4}")
    public boolean assertTrue() {
        for (String extension : allowableExtensions) {
            if (extension == null || extension.matches("^[a-zA-Z0-9]{2,6}$")) {
                return false;
            }
        }
        return true;
    }
}

和以下控制器:

@PostMapping(value = "/settings/update", consumes = "application/json")
public ResponseEntity<?> updateSettings(@RequestBody @Valid Settings settings, BindingResult bindingResult) {
   if(bindingResult.hasErrors()){
        return ResponseEntity.badRequest().body(bindingResult.getAllErrors().get(0).getDefaultMessage());
   }
}

我没有找到预期的错误,并将断点放到assertTrue方法中,但是它没有调用。

我怎么了

mark_o:

assertTruemethod不遵循JavaBean约定,并且您没有进行方法验证,因此永远不会调用它,也不会得到您期望的违规。例如,如果您将Setting班级更改

public class Settings {

    @NotEmpty
    private String[] allowableExtensions;

    @AssertTrue(message = "Each extension must be alphanumeric string with length {2,4}")
    public boolean isAssertTrue() {
        for ( String extension : allowableExtensions ) {
            if ( extension == null || extension.matches( "^[a-zA-Z0-9]{2,6}$" ) ) {
                return false;
            }
        }
        return true;
    }
}

您应该Settings#isAssertTrue调用方法并验证结果。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

NSFetchedResultsControllerDelegate方法不会被调用

JAXB的ValidationEventHandler的handleEvent方法不会被调用

onOptionsItemSelected()方法不会被调用的片段

覆盖的equals方法不会被调用

didreaddata方法不会被调用。使用asyncsocket

订阅keycloak的注销方法不会被调用

MyApplication 中的方法永远不会被调用

代表方法永远不会被调用

CustomView的“ onDraw()”方法永远不会被调用

调用方法,以使程序不会被阻塞

Swift Delegate方法永远不会被调用

UITabBarController委托方法永远不会被调用

NSTableView代表方法将不会被调用

getPermanentIDsForObjects不会被调用

onActivityForResult 不会被调用

flatMap不会被调用

OnStartupNextInstance 不会被调用

onNewIntent不会被调用

javascript:扩展的destroy方法不会被调用,但是super会被调用

onActivityResult 永远不会被调用。没有明显的原因

@ControllerAdvice 中的异常处理程序方法不会被调用

片段中的onClick方法永远不会被调用

NSCollectionView的collectionView:itemForRepresentedObjectAtIndexPath:方法永远不会被调用

为什么我的委托方法永远不会被调用?

自定义委托方法不会被调用

BroadcastReceiver 中的方法 onReceive 永远不会被调用

如果使用@Transactional注解,则Spring方法不会被调用

与@CircuitBreaker 一起使用时,@Recover(回退方法)不会被调用,一旦所有重试都用尽

使用PowerMockito.whenNew()不会被嘲笑,原始方法会被调用