Spring Rest Controller PUT 方法请求正文验证?
Spring Rest Controller PUT method request body validation?
这是我控制器中的内容。
@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} active 设置为 false 它用 false 更新 cardinfo。无论我发送给活动的错误键值都被认为是错误的。我将如何处理这是他们的一种方式。所有其他情况都由 spring 和 404 处理。
如有任何帮助或建议,我们将不胜感激。
因为原语 boolean
的默认值是 false
。使用其相应的包装器 Boolean
,而不是:
public class RequestVO {
private Boolean active;
// getters and setters
}
如果需要 active
值,您还可以添加验证注释,例如 NotNull
:
public class RequestVO {
@NotNull
private Boolean active;
// getters and setters
}
然后使用 Valid
注释与 RequestBody
注释配对触发自动验证过程。
这是我控制器中的内容。
@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} active 设置为 false 它用 false 更新 cardinfo。无论我发送给活动的错误键值都被认为是错误的。我将如何处理这是他们的一种方式。所有其他情况都由 spring 和 404 处理。
如有任何帮助或建议,我们将不胜感激。
因为原语 boolean
的默认值是 false
。使用其相应的包装器 Boolean
,而不是:
public class RequestVO {
private Boolean active;
// getters and setters
}
如果需要 active
值,您还可以添加验证注释,例如 NotNull
:
public class RequestVO {
@NotNull
private Boolean active;
// getters and setters
}
然后使用 Valid
注释与 RequestBody
注释配对触发自动验证过程。