【发布时间】:2020-01-15 08:57:44
【问题描述】:
我想接受发布请求的请求正文作为路由中的用户对象。我正在使用 Play 2.7.1 版
POST /user/create controllers.UserController.createUser(user : User)
我的用户对象如下所示。
public class User{
@NotNull
String userId;
@NotNull
String userName;
@NotNull
@NotEmpty
String userCity;
.
.
.
}
我的 createUser 方法如下所示。
public Result createUser(User user){
//do smething with user
}
当我编译时,我收到一个错误提示 not found: type User
我想接受这种方式的原因是使用休眠验证来验证请求对象user,如下所示
public Result createUser(@Valid User user) {
//do smething with user
}
我已经研究过 PathBindable 和 QueryStringBindable。它们都对我没用,因为用户不是路径参数或查询参数,而是发布请求
最后,我希望框架将请求正文转换为 User 对象并进行验证,而不是编写代码来使用 Jackson 库将 Json 对象转换为 User 对象并使用 Javax Validator 验证 User 对象。
目前我正在使用以下这些函数进行反序列化和验证
public static <T> T deserialize(String json, TypeReference type) throws IOException {
ObjectMapper mapper = new ObjectMapper();
T bean = mapper.readValue(json, type);
validateBean(bean);
return bean;
}
public static <T> void validateBean(T bean) throws IOException {
for (ConstraintViolation violation : beanValidator.validate(bean)) {
throw new IOException(violation.getPropertyPath().toString() + " " + violation.getMessage());
}
}
【问题讨论】:
标签: java playframework routes sbt