【问题标题】:Spring Restful Api validationSpring Restful API 验证
【发布时间】:2014-12-08 06:28:33
【问题描述】:

我是 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);
        }

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

【问题讨论】:

  • “如果我在正确的轨道上” - 不,不是真的。请阅读/观看有关 HTTP 和 REST 的内容 - 是什么使请求成为请求,什么是 URI,查询参数,请求方法,方法主体,客户端如何告诉服务器它正在发送什么样的主体(内容类型)......然后通过再次使用 Spring MVC 文档。还要检查 Spring 的示例项目(例如 Petclinic)。抱歉没有更具体。

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


【解决方案1】:

首先我建议去掉所有的路径变量。将它们移动到某种 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 依赖项即可。

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

【讨论】:

    猜你喜欢
    • 2014-07-04
    • 2013-09-22
    • 2017-09-14
    • 2011-11-28
    • 1970-01-01
    • 2014-02-09
    • 2013-08-21
    • 2011-10-02
    • 2014-11-15
    相关资源
    最近更新 更多