Spring Restful Api验证

时间:2014-10-13 16:04:36

标签: rest spring-mvc spring-data-jpa

我是Spring的新手,正在为一个项目开发spring restful API。我需要对传递的参数进行验证。我现在被困在那里。 以下是我在控制器中的内容。

 @RequestMapping(value = "/processRequest/{username}/{password}/{item}/{reference}/{email}/{amount}/{order_id}/{trxn_id}/{pay_channel}", method = RequestMethod.POST)
    public @ResponseBody
    JsonResponse processTopupRequest(@PathVariable("username") String username,
            @PathVariable("password") String password,
            @PathVariable("item") String item, @PathVariable("reference") String reference,
            @PathVariable("email") String email, @PathVariable("amount") BigDecimal amount,
            @PathVariable("order_id") String orderId, @PathVariable("trxn_id") String transactionId,
            @PathVariable("pay_channel") PaymentChannel payChannel) {

        JsonResponse response = new JsonResponse();
        TopupOrderAPI apiOrder = new TopupOrderAPI(username, password, item, reference, email, amount,orderId, transactionId, payChannel);
        }

我想知道我是否在正确的轨道上。如果是这样,任何人都可以建议我如何对参数进行验证...尤其是电话号码,电子邮件和金额。 非常感谢

1 个答案:

答案 0 :(得分:3)

首先,我建议摆脱所有的路径变量。将它们移动到某种DTO对象,例如TopUpRequestDto。然后将JSR-303验证注释添加到该DTO,因此它看起来像这样:

public class TopUpRequestDto {

    @NotBlank
    @Size(min = 3, max = 50)
    private String username;
    private String password;
    private String item;
    private String email;
    private String orderId;
    private PaymentChannel paymentChannel;

    // Getters and setters
}

为所有字段添加适当的验证(您可以在下面的链接中找到可用的JSR-303注释列表)。在上面的示例中,我将验证仅放在单个字段上以演示该概念。

然后像这样修改你的控制器方法:

@RequestMapping(value = "/processTopUpRequest", method = RequestMethod.POST)
public @ResponseBody JsonResponse processTopUpRequest(@RequestBody @Valid TopUpRequestDto dto) {
    // your logic
}

当您发出包含无效数据的请求时,Spring将自动返回BAD REQUEST状态。

要启用JSR-303验证,只需将JSR-303提供程序放在类路径上,Spring应该处理其余的事情。因此,如果您以Maven为例,只需添加hibernate-validator依赖项。

以下是一些您可能会觉得有用的链接: