Spring Rest Controller PUT 方法请求正文验证?
Posted
技术标签:
【中文标题】Spring Rest Controller PUT 方法请求正文验证?【英文标题】:Spring Rest Controller PUT method request body validation? 【发布时间】:2016-04-24 01:10:00 【问题描述】:这是我的控制器中的内容。
@RequestMapping(value = "/accountholders/cardHolderId/cards/cardId", produces = "application/json; charset=utf-8", consumes = "application/json", method = RequestMethod.PUT)
@ResponseBody
public CardVO putCard(@PathVariable("cardHolderId") final String cardHolderId,
@PathVariable("cardId") final String cardId, @RequestBody final RequestVO requestVO)
if (!Pattern.matches("\\d+", cardHolderId) || !Pattern.matches("\\d+", cardId))
throw new InvalidDataFormatException();
final String requestTimeStamp = DateUtil.getUTCDate();
iCardService.updateCardInfo(cardId, requestVO.isActive());
final CardVO jsonObj = iCardService.getCardHolderCardInfo(cardHolderId, cardId, requestTimeStamp);
return jsonObj;
这是请求正文 bean:-
public class RequestVO
private boolean active;
public boolean isActive()
return active;
public void setActive(boolean active)
this.active = active;
我遇到的问题是当我将请求正文发送为 "acttttt":true 活动设置为 false,它使用 false 更新 cardinfo。无论我发送活动的任何错误键值都被认为是错误的。我将如何处理这是他们的一种方式。其他所有场景都由 spring 处理,带有 404。
感谢任何帮助或建议。
【问题讨论】:
【参考方案1】:因为原语boolean
的默认值是false
。请改用其对应的 Wrapper,Boolean
:
public class RequestVO
private Boolean active;
// getters and setters
如果需要active
值,您还可以添加验证注释,如NotNull
:
public class RequestVO
@NotNull
private Boolean active;
// getters and setters
然后使用Valid
注解与RequestBody
注解配对触发自动验证过程。
【讨论】:
我现在遇到的另一个问题是,当我发送 "active":2343 时,它认为它是真的解决那个不考虑那个。 我想你可以自己写Converter
并将其添加到转换器列表中。以上是关于Spring Rest Controller PUT 方法请求正文验证?的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 忽略 Rest Controller 中的 Jackson 注释
Spring Boot Rest Controller 通用 POST 类型
Spring Boot Rest Controller:返回默认错误 JSON
Angular 2 + CORS + 带有 Spring Security 的 Spring Boot Rest Controller
从 Spring Boot Rest Controller 访问 JWT 令牌
在Spring REST Controller中使用Jackson Deserialization for DateTime