首页 > 解决方案 > 我正在尝试构建 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 相关的项目

标签: javamongodbjsp

解决方案


此 findById 方法将仅搜索唯一键。所以它总是只返回一个对象。您必须定义将查询给定变量和返回列表的其他方法


推荐阅读