java - 我正在尝试构建 mongodb springboot crud 程序,在该程序中遇到问题,例如无法迭代提供的项目
问题描述
我正在创建 springboot mongodb crud 应用程序,其中从 mongodb 检索数据并显示在 displayPlayers.jsp 中,但是当我执行 findById() 时出现问题,因为这仅在 optional() 中可用,并且不能在前端jsp页面。
下面是控制器类,displayPlayers.jsp,displaydetails.jsp,CsvServiceImpl.java
控制器类
package com.durlabh.controllers;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.durlabh.document.Model;
import com.durlabh.repositories.ModelRepository;
import com.durlabh.services.CsvServiceImpl;
@Controller
public class MainController {
@Autowired
CsvServiceImpl csvFileServices;
@Autowired
ModelRepository modelRep;
@RequestMapping("/{id}")
public String displayDetails( @PathVariable(value="id")String id, ModelMap modelMap){
Optional<Model> detail = csvFileServices.getDetailsById(id);
// Optional<Model> detail = modelRep.findById(id);
modelMap.addAttribute("details", detail);
System.out.println("yeass");
return "/WEB-INF/jsps/displayDetails.jsp";
}
@RequestMapping("/players")
public String displayPlayers(ModelMap modelMap){
List<Model> mod= csvFileServices.getAll();
modelMap.addAttribute("mode", mod);
System.out.println("yes");
return "/WEB-INF/jsps/displayPlayers.jsp";
}
}
displayDetails.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@page isELIgnored="false" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>Players:</h2>
<table>
<c:forEach items="${details}" var="detailss">
<tr>
<td>${detailss.age }</td>
<td>${detailss.height }</td>
<td>${detailss.weight}</td>
<td>${detailss.playedPositions }</td>
</tr>
</c:forEach>
</table>
</body>
</html>
显示播放器.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@page isELIgnored="false" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>Players:</h2>
<table>
<c:forEach items="${mode }" var="modes">
<tr>
<td><a href="id=${modes.id}">${modes.name }</a></td>
</tr>
</c:forEach>
</table>
</body>
</html>
CSVServiceImpl.java
package com.durlabh.services;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import com.durlabh.document.Model;
import com.durlabh.repositories.ModelRepository;
import com.durlabh.utils.CsvUtil;
import com.opencsv.bean.CsvToBean;
import com.opencsv.bean.CsvToBeanBuilder;
@Service
public class CsvServiceImpl implements CsvService {
@Autowired
ModelRepository modelRep;
public void store(MultipartFile csvfile) {
Reader fileReader=null;
CsvToBean<Model> csvToBean=null;
List<Model> models=new ArrayList<Model>();
try (
Reader reader=new BufferedReader(new InputStreamReader(csvfile.getInputStream()))){
csvToBean=new CsvToBeanBuilder(reader).withType(Model.class).withIgnoreLeadingWhiteSpace(true).build();
models= csvToBean.parse();
modelRep.saveAll(models);
}catch(Exception e) {
throw new RuntimeException("Fail!->message="+e.getMessage()) ;
}
}
public List<Model> getAll() {
return modelRep.findAll();
}
@Override
public Optional<Model> getDetailsById(String id) {
Optional<Model> byId = modelRep.findById(id);
System.out.print(byId.get());
return byId;
}
}
findById 在 optional() 中可用,不在 List 中,我无法在 displaydetails.jsp 页面中迭代与该 id 相关的项目
解决方案
此 findById 方法将仅搜索唯一键。所以它总是只返回一个对象。您必须定义将查询给定变量和返回列表的其他方法
推荐阅读
- php - 如何在同一会话中使用 Curl php 重定向
- c# - C# 直接从文本框搜索
- javascript - Angular5中的轮播
- authentication - Umbraco 7.11.1 - 禁用或绕过 Umbraco 的身份验证
- jenkins - 如何在 jenkinsfile 中获取代理/节点名称?
- proxy - 无法在 Proxy 后面使用 Hyperledger-Composer
- google-chrome - 在 chrome 中查找发出 HTTP 请求的函数
- c# - 将 IEnumerable 类的字段序列化为 XML
- nexus - nexus oss 3.12.1-01 迁移到新机器在升级过程中失败
- ios - 如何以编程方式为视频文件添加水印