我有以下控制器方法:
@RequestMapping(value="/map/update", method=RequestMethod.POST, produces = "application/json; charset=utf-8")
@ResponseBody
public ResponseEntityWrapper updateMapTheme(
HttpServletRequest request,
@RequestBody @Valid List<CompanyTag> categories,
HttpServletResponse response
) throws ResourceNotFoundException, AuthorizationException {
...
}
Run Code Online (Sandbox Code Playgroud)
CompanyTag以这种方式定义:
public class CompanyTag {
@StringUUIDValidation String key;
String value;
String color;
String icon;
Icon iconObj;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
...
}
Run Code Online (Sandbox Code Playgroud)
问题是未触发验证,未验证CompanyTag列表,从不调用"StringUUIDValidation"验证器.
如果我删除了List并且只尝试发送一个CompanyTag,即代替:
@RequestBody @Valid List<CompanyTag> categories,
Run Code Online (Sandbox Code Playgroud)
使用:
@RequestBody @Valid CompanyTag category,
Run Code Online (Sandbox Code Playgroud)
它按预期工作,所以显然Spring不喜欢验证事物列表(尝试使用数组,但也没有用).
任何人都知道缺少什么?
在Spring MVC REST服务(json)中,我有一个像这样的控制器方法:
@RequestMapping(method = RequestMethod.POST, value = { "/doesntmatter" })
@ResponseBody
public List<...> myMethod(@Valid @RequestBody List<MyBean> request, BindingResult bindingResult) {
Run Code Online (Sandbox Code Playgroud)
MyBean类具有bean验证注释的位置.
在这种情况下似乎没有进行验证,尽管它适用于其他控制器.
我不想将列表封装在dto中,这将改变json输入.
为什么没有对bean列表进行验证?有哪些替代方案?
我有一个实体:
class SomeInfo(
@NotNull @Pattern(regexp = Constraints.EMAIL_REGEX) var value: String) {
var id: Long? = null
}
Run Code Online (Sandbox Code Playgroud)
和控制器方法:
@RequestMapping(value = "/some-info", method = RequestMethod.POST)
public Id create(@Valid @RequestBody SomeInfo someInfo) {
...
}
Run Code Online (Sandbox Code Playgroud)
@Valid 注释不起作用.
看起来Spring需要一个默认的无参数构造函数,而上面的花哨代码变得像这样丑陋(但工作):
class SomeInfo() {
constructor(value: String) {
this.value = value
}
@NotNull @Pattern(regexp = Constraints.EMAIL_REGEX)
lateinit var value: String
var id: Long? = null
}
Run Code Online (Sandbox Code Playgroud)
有什么好的做法让它不那么罗嗦?
谢谢.