Bean验证不适用于不同的Spring Boot版本

关于Bean验证,我面临着很奇怪的行为。我有一个个人项目,作为游乐场,使用最新版本的spring boot和JDK 11,在其中创建了一个带有@RequestBody@Valid注释的PUT端点:

@RequestMapping("/change_return")
public class TestController
{
    @PutMapping(value = "/change",produces = "application/json")
    public ResponseEntity change(@Valid @RequestBody ChangeSchema changeSchema)
    {
        System.out.println("Rental Agreement: " + changeSchema.getsomeLong());

        return ResponseEntity.ok(changeSchema.getsomeLong());
    }
}

用于@RequestBody的类非常简单:

package com.vitorvillar.validation.demo;

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.Digits;
import javax.validation.constraints.Future;
import javax.validation.constraints.NotNull;
import java.util.Date;

@Getter
@Setter

public class ChangeSchema
{
    @NotNull
    @Digits(integer = 10,fraction = 0)
    private Long someLong;

    @NotNull
    @Digits(integer = 5,fraction = 0)
    private Integer anotherInt;

    @Future
    @NotNull
    @JsonDeserialize(using = JsonDateDeserializer.class)
    private Date someDate;
}

尽管如此,我还有另一个项目使用了该类,并在Spring Boot 2.1和JDK 8上运行。验证和JSON反序列化只是行不通。我必须明确声明@AllArgsConstructor,并且注释@JsonDeserialize(using = JsonDateDeserializer.class)在字段级或设置器级的任何地方都无效。我必须注册一个Bean才能显式反序列化Date类型:

@Bean
    public Module dateTypeJsonDeserializer()
    {
        SimpleModule module = new SimpleModule();
        module.addDeserializer(Date.class,new JsonDateDeserializer());
        return module;
    }

有人知道为什么我必须手动做所有这些事情吗?

如果您需要更多信息,请告诉我,我会发布。

ganmazhememahuan 回答:Bean验证不适用于不同的Spring Boot版本

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3028374.html

大家都在问