【问题标题】:Spring Rest Controller PUT method request body validation?Spring Rest Controller PUT 方法请求正文验证?
【发布时间】: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。

感谢任何帮助或建议。

【问题讨论】:

    标签: java json spring spring-boot spring-restcontroller


    【解决方案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 并将其添加到转换器列表中。
    猜你喜欢
    • 2022-01-22
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 2018-08-08
    相关资源
    最近更新 更多