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