我希望我的RestController在设置日期输入(必填= false)但正则表达式错误(例如10-2019)时返回错误
library(ggplot2)
library(reshape2)
library(Hmisc)
library(stats)
abbreviateSTR <- function(value, prefix){ # format string more concisely
lst = c()
for (item in value) {
if (is.nan(item) || is.na(item)) { # if item is NaN return empty string
lst <- c(lst, '')
next
}
item <- round(item, 2) # round to two digits
if (item == 0) { # if rounding results in 0 clarify
item = '<.01'
}
item <- as.character(item)
item <- sub("(^[0])+", "", item) # remove leading 0: 0.05 -> .05
item <- sub("(^-[0])+", "-", item) # remove leading -0: -0.05 -> -.05
lst <- c(lst, paste(prefix, item, sep = ""))
}
return(lst)
}
d <- mtcars
cormatrix = rcorr(as.matrix(d), type='spearman')
cordata = melt(cormatrix$r)
cordata$labelr = abbreviateSTR(melt(cormatrix$r)$value, 'r')
cordata$labelP = abbreviateSTR(melt(cormatrix$P)$value, 'P')
cordata$label = paste(cordata$labelr, "\n",
cordata$labelP, sep = "")
cordata$strike = ""
cordata$strike[cormatrix$P > 0.05] = "X"
txtsize <- par('din')[2] / 2
ggplot(cordata, aes(x=Var1, y=Var2, fill=value)) + geom_tile() +
theme(axis.text.x = element_text(angle=90, hjust=TRUE)) +
xlab("") + ylab("") +
geom_text(label=cordata$label, size=txtsize) +
geom_text(label=cordata$strike, size=txtsize * 4, color="red", alpha=0.4)
但是,验证未进行。我原本期待一个错误,但是没有引发任何错误,后来当我尝试用错误的输入来构建新对象时发生了错误
答案 0 :(得分:3)
@Validated
修复验证当您希望触发验证时,必须使用@Validated
来注释控制器类:
@Validated
@RestController
public class MyController {
...
}
要有资格通过Spring驱动的方法验证,所有目标类都必须使用Spring的
@Validated
注释进行注释。
@Timed
我发现您的控制器方法用@Timed
注释的事实很奇怪。这是一个特定于测试的注释,并且无意在实际代码中使用:
特定于测试的注释,指示测试方法必须在指定的时间段内完成执行。
您可能还需要查看依赖项,并确保它们使用正确的范围。
YearMonth
代替String
由于您似乎在控制器方法中收到了年和月的值,因此最好使用YearMonth
而不是String
:
ISO-8601日历系统中的年月,例如
2007-12
。
您的控制器方法如下:
@GetMapping
public ResponseEntity<Foo> getList(@RequestParam(name = "date", required = false) YearMonth date) {
...
}
答案 1 :(得分:1)
您需要在类中添加@Validated注释:
@RestController
@Validated
public class myRestController{
@Timed
public ResponseEntity<ResponseBodyWrapper<List<ListData>>> getList(
@RequestParam(name = "date", required = false) @Pattern(regexp = "[0-9]{4}-[0-9]{1,2}") String date) {
// Logic
}
}
参考:https://www.baeldung.com/javax-validation-method-constraints 点3。