Java @有效注释为';我的DTO不工作
我有一个RESTAPI,它接收一个学生,以便保存。我在控制器中遇到的问题是,我希望接收这个json并转换为我的StudentDTO,但同时使用@Valid注释进行验证,但它不起作用,它只是继续运行 这是我的控制器:Java @有效注释为';我的DTO不工作,java,jax-rs,Java,Jax Rs,我有一个RESTAPI,它接收一个学生,以便保存。我在控制器中遇到的问题是,我希望接收这个json并转换为我的StudentDTO,但同时使用@Valid注释进行验证,但它不起作用,它只是继续运行 这是我的控制器: package com.controllers.usersapi; import com.dto.usersapi.StudentDTO; import com.services.usersapi.StudentApiService; import com.services.use
package com.controllers.usersapi;
import com.dto.usersapi.StudentDTO;
import com.services.usersapi.StudentApiService;
import com.services.usersapi.StudentApiServiceImpl;
import com.utils.OurDataSource;
import org.springframework.web.bind.annotation.RequestBody;
import javax.validation.Valid;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.Map;
@Path("users")
public class StudentApiRestController {
@POST
@Path("/students")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response createNewStudents(@Valid @RequestBody StudentDTO studentDTO) {
return OurDataSource.evalEm(entityManager -> {
Map<String, Object> studentResultsMap;
StudentApiService studentApiService = new StudentApiServiceImpl(entityManager);
studentResultsMap = studentApiService.saveStudent(studentDTO);
return Response.status(Response.Status.CREATED).entity(studentResultsMap).build();
});
}
}
这就是我使用的json
{
"emailAddress": "dvanderlinde@gmaill.com",
"firstName": "Dutch",
"lastName": "Van Der Linde",
"loginId": "dvanderlindeeee",
"id": "DVDL200000"
}
例外情况
import com.google.gson.JsonObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;
@Provider
public class DefaultExceptionMapper implements ExceptionMapper<Exception> {
private static final Logger log = LoggerFactory.getLogger(DefaultExceptionMapper.class);
@Override
public Response toResponse(Exception e) {
log.error(e.getMessage(), e);
JsonObject error = new JsonObject();
error.addProperty("message", e.getMessage());
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
.entity(error)
.type(MediaType.APPLICATION_JSON)
.build();
}
}
import com.google.gson.JsonObject;
导入org.slf4j.Logger;
导入org.slf4j.LoggerFactory;
导入javax.ws.rs.core.MediaType;
导入javax.ws.rs.core.Response;
导入javax.ws.rs.ext.ExceptionMapper;
导入javax.ws.rs.ext.Provider;
@提供者
公共类DefaultExceptionMapper实现ExceptionMapper{
私有静态最终记录器log=LoggerFactory.getLogger(DefaultExceptionMapper.class);
@凌驾
公众回应(例外e){
log.error(e.getMessage(),e);
JsonObject错误=新建JsonObject();
error.addProperty(“message”,例如getMessage());
返回Response.status(Response.status.INTERNAL\u SERVER\u错误)
.实体(错误)
.type(MediaType.APPLICATION_JSON)
.build();
}
}
如果类路径上有任何JSR-303实现(如Hibernate Validator),bean验证将自动启用。尝试在一个基于SpringBootMaven的项目中添加以下依赖项
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
org.springframework.boot
.检查项目的pom.xml
文件中是否有这些依赖项,如果您没有尝试将它们放入
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>${validation-api}</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate-validator}</version>
</dependency>
javax.validation
验证api
${validation api}
org.hibernate.validator
休眠验证器
${hibernate验证程序}
遗憾的是,我没有这种依赖关系,而且由于限制,我无法添加它。。。我有一个hibernate验证器。如果你使用maven,你能在为项目添加依赖项的地方共享pom.xml吗?我很想,但我不能让你知道。。。。但是你告诉我应该有哪些依赖项,然后我就可以告诉你我有没有依赖项。我有hibernate依赖项,但是我可以添加javax验证。这些是唯一需要的吗?这些应该是唯一需要的,是的,我添加了它们,但仍然不起作用。我是否必须实现上述内容以外的其他内容?您是如何实现异常处理的?也许遵循本教程应该可以消除一些疑问:,特别是第4和第5段可能对您有用。好的,我会尝试一下,看看会有什么结果,我会更新此结果
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>${validation-api}</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate-validator}</version>
</dependency>