【发布时间】:2016-06-30 21:03:58
【问题描述】:
我正在开发一个 Spring MVC 项目,但遇到了 ArrayOutOfBound 异常。如果这是 Java 7,那么我将没有问题,但由于它是 Java 8,而且我是新手,所以我不知道问题出在哪里。我已经搜索了大约两天,但没有运气。我将不胜感激。
现在越界是由ProjectService 类引起的,特别是
public Project find(Long projectId)....
现在我的服务等级是:
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
import org.springframework.stereotype.Service;
import com.spring.project.model.Project;
@Service
public class ProjectService {
private List<Project> projects = new LinkedList<>();
public ProjectService(){
Project javaProject = this.createProject("Java Project", "This is a Java Project");
Project javascriptProject = this.createProject("Javascript Project", "This is a Javascript Project");
Project htmlProject = this.createProject("HTML Project", "This is an HTML project");
this.projects.addAll(Arrays.asList(new Project[]{javaProject,javascriptProject, htmlProject}));
}
public List<Project> findAll(){
return this.projects;
}
public Project find(Long projectId){
return this.projects.stream().filter(p -> {
return p.getProjectId().equals(projectId);
}).collect(Collectors.toList()).get(0);
}
private Project createProject(String title, String description){
Project project = new Project();
project.setName(title);
project.setAuthorizedFunds(new BigDecimal("100000"));
project.setAuthorizedHours(new BigDecimal("1000"));
project.setDescription(description);
project.setSponsor("NASA");
project.setYear("2016");
project.setSpecial(true);
project.setType("single");
return project;
}
}
现在我的控制器看起来像这样:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.spring.project.services.ProjectService;
@Controller
@RequestMapping("/project")
public class ProjectController {
@Autowired
private ProjectService projectService;
@RequestMapping(value="/{projectId}")
public String findProject(Model model, @PathVariable("projectId") Long projectId){
model.addAttribute("project", this.projectService.find(projectId));
return "project";
}
@RequestMapping(value="/find")
public String find(Model model){
model.addAttribute("projects", this.projectService.findAll());
return "projects";
}
}
【问题讨论】:
-
你喜欢冗余代码,是吗?代替
Arrays.asList(new Project[]{x,y,z}),你可以写Arrays.asList(x,y,z)和.filter(p -> { return p.getProjectId().equals(projectId); }),可以用.filter(p -> p.getProjectId().equals(projectId))代替。如果您只对第一场比赛感兴趣,请使用findFirst()而不是收集List中的所有内容。
标签: java spring-mvc java-8