Java 弹簧靴。为什么即使数据库中有对象,by-GET方法仍然返回null?
我正在用Spring Boot创建一个CRUD应用程序。我实现了create特性,并主动添加到数据库中,并使用H2控制台进行检查,但是我的GET方法遇到了问题。我将Java 弹簧靴。为什么即使数据库中有对象,by-GET方法仍然返回null?,java,spring,spring-boot,rest,Java,Spring,Spring Boot,Rest,我正在用Spring Boot创建一个CRUD应用程序。我实现了create特性,并主动添加到数据库中,并使用H2控制台进行检查,但是我的GET方法遇到了问题。我将projectId作为参数传递以获取该项目。我正在用Postman测试我的端点,虽然状态代码是200,但我没有看到任何JSON。 在findProjectByIdentifier()中,我添加了一个如果Object==null,print ProjectId not found,即使我传递了一个有效的ProjectId,当它确实在数据
projectId
作为参数传递以获取该项目。我正在用Postman测试我的端点,虽然状态代码是200,但我没有看到任何JSON。
在findProjectByIdentifier()
中,我添加了一个如果Object==null,print ProjectId not found
,即使我传递了一个有效的ProjectId,当它确实在数据库中时,它也会返回一个“ProjectId not found”。既然这个语句打印出来了,我没有得到任何JSON,这意味着什么?问题出在哪里
项目服务类别:
import io.ppmtool.domain.Project;
import io.ppmtool.exceptions.ProjectIdException;
import io.ppmtool.repositories.ProjectRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class ProjectService {
@Autowired
private ProjectRepository projectRepository;
public Project saveOrUpdateProject(Project project) {
try {
project.setProjectIdentifier(project.getProjectIdentifier().toUpperCase());
return projectRepository.save(project);
} catch (Exception e){
throw new ProjectIdException("Project ID '"+project.getProjectIdentifier().toUpperCase()+ "' already exists.");
}
}
public Project findProjectByIdentifier(String projectId){
Project project = projectRepository.findByProjectIdentifier(projectId.toUpperCase());
if(project == null) {
throw new ProjectIdException("Project ID does not exists.");
}
return project;
}
}
项目控制器
@RequestMapping("/api/project")
public class ProjectController {
@Autowired
private ProjectService projectService;
@Autowired
private MapValidationErrorService mapValidationErrorService;
@PostMapping("")
public ResponseEntity<?> createNewProject(@Valid @RequestBody Project project, BindingResult result) {
ResponseEntity<?> errorMap = mapValidationErrorService.MapValidationService(result);
if(errorMap != null) return errorMap;
Project project1 = projectService.saveOrUpdateProject(project);
return new ResponseEntity<Project>(project, HttpStatus.CREATED);
}
@GetMapping("/{projectId}")
public ResponseEntity<?> getProjectById(@PathVariable String projectId){
Project project = projectService.findProjectByIdentifier(projectId);
return new ResponseEntity<Project>(project, HttpStatus.OK);
}
}
不要使用大写字母:
这将导致产生不同于H2表中的值或先用大写字母保存在表中的值。
仅供参考,当找不到实体/资源时,要使用的状态代码是404而不是200。也共享您的项目POJO类。调用
findProjectByIdentifier
方法时,问题可能出在projectId.toUpperCase()
中。显示存储在数据库中的项目id示例。您可以将可选作为ProjectRepository#findByProjectIdentifier
方法的结果类型。然后,如果指定的id未找到项目,则可以从ProjectService#getProjectById
方法引发异常:projectRepository.findByProjectIdentifier(projectId).orelsetrow(EntityNotFoundException::new)代码>
@Repository
public interface ProjectRepository extends CrudRepository<Project, Long> {
Project findByProjectIdentifier(String projectId);
}
@Entity
public class Project {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotBlank(message="Project name is required")
private String projectName;
@NotBlank(message = "Project Identifier is required")
@Size(min=4, max=5, message="Please use 4-5 characters")
@Column(updatable = false, unique = true)
private String projectIdentifier;
@NotBlank(message="Project description required")
private String descripton;
@JsonFormat(pattern="yyyy-mm-dd")
private Date start_date;
@JsonFormat(pattern="yyyy-mm-dd")
private Date end_date;
@JsonFormat(pattern="yyyy-mm-dd")
private Date created_At;
@JsonFormat(pattern="yyyy-mm-dd")
private Date updated_At;
public Project() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
public String getProjectIdentifier() {
return projectIdentifier;
}
public void setProjectIdentifier(String projectIdentifier) {
this.projectIdentifier = projectIdentifier;
}
public String getDescripton() {
return descripton;
}
public void setDescripton(String descripton) {
this.descripton = descripton;
}
public Date getStart_date() {
return start_date;
}
public void setStart_date(Date start_date) {
this.start_date = start_date;
}
public Date getEnd_date() {
return end_date;
}
public void setEnd_date(Date end_date) {
this.end_date = end_date;
}
public Date getCreated_At() {
return created_At;
}
public void setCreated_At(Date created_At) {
this.created_At = created_At;
}
public Date getUpdated_At() {
return updated_At;
}
public void setUpdated_At(Date updated_At) {
this.updated_At = updated_At;
}
@PrePersist
protected void onCreated() {
this.created_At = new Date();
}
@PreUpdate
protected void onUpdate() {
this.updated_At = new Date();
}
}