我是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);
}
我想知道我是否在正确的轨道上。如果是这样,任何人都可以建议我如何对参数进行验证...尤其是电话号码,电子邮件和金额。 非常感谢
答案 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
依赖项。
以下是一些您可能会觉得有用的链接: