验证无法在Rest API

时间:2017-07-11 07:32:42

标签: rest spring-data

我无法使用验证注释。在传递应该通过注释验证的值时,我没有为它们配置消息。

控制器:

@RestController
public class AccountConfigController {

    @Autowired
    AccountConfigService accountConfigService;

    @RequestMapping(value = "/${project.version}/acctconfigs", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    public List<AccountConfigViewDTO> viewAccountConfig() throws BankServiceException {
        List<AccountConfigViewDTO> accountConfigDTOList= accountConfigService.viewAccountConfig();
        return accountConfigDTOList;
    }

    @RequestMapping(value = "/${project.version}/acctconfigs", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE)
    public boolean editAccountConfig(@RequestBody @Valid AccountConfigEditDTO accountConfigEditDTO) throws BankServiceException {
        return accountConfigService.editAccountConfig(accountConfigEditDTO);
    }
}

我使用了两个DTO,因为我没有使用它来完成所需的操作。

AccountConfigEditDTO:

public class AccountConfigEditDTO implements java.io.Serializable {

    @JsonProperty("accountconfig")
    @Valid
    private List<AccountConfigViewDTO> accountConfigViewDTOList;

    @NotBlank(message="accountconfig.lastUpdatedId.mandatory")
    @Size(max=10,message="accountconfig.lastUpdatedId.size")
    @JsonProperty("userId")
    private String lstUpdtId;

    //Getter and Setters and Constructors
}

AccountConfigViewDTO:

public class AccountConfigViewDTO implements Serializable {

    @NotNull(message="newcustomer.accttype.mandatory")
    private char acctType;

    @NotEmpty(message="accountconfig.interest.mandatory")
    @Digits(integer=8 , fraction=4 , message="accountconfig.interest.size")
    private BigDecimal interestRate;

    @NotEmpty(message="accountconfig.interest.mandatory")
    @Digits(integer=8 , fraction=4 , message="accountconfig.minimumBalance.size")
    private BigDecimal minBalance;

    //Getters and Setters and constructors
 }

当我传递数据时,例如:

{
    "accountconfig" : [
        {
            "acctType": "C",
            "interestRate": "",
            "minBalance": 500
        },
        {
            "acctType":"S",
            "interestRate": 4.00,
            "minBalance": 5000.0
        }
    ],
    "userId": "admin"
}

我得到了

  

{“errorCode”:500,“errorMsg”:“发生未知错误。”}

但不是我的自定义消息“利率是强制性的”。我在application.properties文件中给出了此错误消息映射。

如果代码中有任何问题,请告诉我吗?

1 个答案:

答案 0 :(得分:1)

最终尝试了各种选项,我得到了解决问题的方法。所以考虑发布它以防万一其他人遇到这个问题。

解决方案是在List字段的AccountConfigEditDTO中添加@Valid:

public class AccountConfigEditDTO implements java.io.Serializable{


    @JsonProperty("accountconfig")
    private @Valid List<AccountConfigViewDTO> accountConfigViewDTOList;

    @NotBlank(message="accountconfig.lastUpdatedId.mandatory")
    @Size(max=10,message="accountconfig.lastUpdatedId.size")
    @JsonProperty("userId")
    private String lstUpdtId;
}

这就是诀窍。但是对于验证char字段仍然没有运气,我认为唯一的方法是进行自定义验证器注释。

我对上述问题的理解还有一点是验证没有进入列表中的DTO,因此添加@Valid就是这样做的。如果有人有更好的解释,请发表评论。