【发布时间】:2021-10-28 23:09:57
【问题描述】:
我有一个休息控制器,它在请求正文中采用 Project 对象,使用 ProjectService 将其保存到数据库中。
@RestController
@RequestMapping("/api/project")
public class ProjectController {
@Autowired
private ProjectService projectService;
@PostMapping(value = "", produces="application/json")
public ResponseEntity<Project> createNewProject(@Valid @RequestBody Project project){
Project proj1 = projectService.saveOrUpdate(project);
return new ResponseEntity<Project>(proj1, HttpStatus.CREATED);
}
}
实体Project 具有针对不同字段的验证和自定义验证消息,例如 -
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
@Entity
@Table(name="project")
public class Project {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private Long id;
@Column(name="project_name")
@NotBlank(message = "Project name cannot be blank")
private String projectName;
@Column(name="project_identifier", updatable = false, unique = true)
@NotBlank(message="Project Identifier cannot be blank")
@Size(min = 4, max = 5, message="Please use 4-5 character identifier")
private String projectIdentifier;
@Column(name="description")
@NotBlank(message = "Project description is required")
private String description;
@Column(name="start_date")
@JsonFormat(pattern = "dd-mm-yyyy")
private Date start_date;
@Column(name="end_date")
@JsonFormat(pattern = "dd-mm-yyyy")
private Date end_date;
@Column(name="created_at")
@JsonFormat(pattern = "dd-mm-yyyy")
private Date created_At;
@Column(name="updated_at")
@JsonFormat(pattern = "dd-mm-yyyy")
private Date updated_At;
//...getters and setters..
}
我测试过这是 Postman。发送有效对象有效,但发送无效对象(空对象)不会给我错误消息。它只是给出了一个错误的请求错误。另外,为什么我会得到一个用于休息控制器错误的 HTML 页面?我期待一个 JSON 错误消息 -
这是 pom.xml 顺便说一句(我认为那里有一些不必要的东西)-
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<springframework.version>5.2.8.RELEASE</springframework.version>
<springsecurity.version>5.4.0</springsecurity.version>
<hibernate.version>5.4.1.Final</hibernate.version>
<hibernate.validator.version>6.2.0.Final</hibernate.validator.version>
<mysql.connector.version>8.0.25</mysql.connector.version>
<c3po.version>0.9.5.5</c3po.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate.validator.version}</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>${c3po.version}</version>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>javax.persistence-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.connector.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
我在这里做错了什么?请告诉我。谢谢!
编辑:语法
【问题讨论】:
标签: java spring rest validation postman