Изображение из БД не будет отображаться в JSP: сопоставление для HTTP-запроса не найдено - PullRequest
0 голосов
/ 27 сентября 2018

Я получил это в моем контроллере:

@RequestMapping(value = "details", method = RequestMethod.GET)
public ModelAndView details(@Valid @ModelAttribute("MessageForm") final MessageForm form, @RequestParam("publicationid") String publicationid) {
    final Publication pub = ps.findById(Integer.valueOf(publicationid));
    final User user = us.findById(pub.getUserid());
    final ModelAndView mav = new ModelAndView("details");
    long myid = pub.getPublicationid();

    UploadFile ufa = imageServiceImp.findFirstById(Long.parseLong(publicationid));
    System.out.println("mi publication id es " +ufa.getPublicationId());
    System.out.println("mi id de upload es " + ufa.getId());
    System.out.println("mis bytes son " + ufa.getData().toString());
   // these prints work fine

    try {
        Image img = ImageIO.read(new ByteArrayInputStream(ufa.getData()));
        mav.addObject("image1", img);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    //other stuff
    return mav;
}

Таким образом, я сделал следующее в моем JSP для отображения изображения:

  <img class="mySlides" src="<c:out value="${image1}" />" >

Оказывается, я получаю следующее сообщение, когда япопасть на эту страницу, пробуя мою программу (изображение, конечно, не отображается):

 Sep 26, 2018 11:27:23 PM org.springframework.web.servlet.PageNotFound noHandlerFound
 WARNING: No mapping found for HTTP request with URI [/null/meinHaus/BufferedImage@4c8d98b4:%20type%20=%205%20ColorModel:%20] in DispatcherServlet with name 'dispatcher'

Что может происходить?

Я использую spring-mvc.

Также getData () возвращает массив типа byte [].

1 Ответ

0 голосов
/ 27 сентября 2018

Это не тот способ, которым вы должны загружать изображения.

Напишите метод в классе контроллера, как показано ниже.

@RequestMapping(value = "/users/getProfilePic/{uniqueId}",method = RequestMethod.GET)
    public ResponseEntity<byte[]> getProfilePic(@PathVariable long uniqueId) {

        try{ 
            //reading image from tomcat folder you can read from the place where you stored the images
            String rootPath = System.getProperty("catalina.home");
            String profilePicDirectory = rootPath + File.separator + "profilePictures" + File.separator  + uniqueId;
            String profilePicFile = profilePicDirectory +  File.separator + uniqueId +".jpg";

            RandomAccessFile f = new RandomAccessFile(profilePicFile, "r");
            byte[] b = new byte[(int)f.length()];
            f.readFully(b);
            f.close();
            final HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.IMAGE_JPEG);
            return new ResponseEntity<byte[]>(b, headers, HttpStatus.OK);
        }catch(Exception ex){
            //ex.printStackTrace();
            final HttpHeaders headers = new HttpHeaders();
            return new ResponseEntity<byte[]>(null, headers, HttpStatus.NOT_FOUND);
            //return null;
        }
    }

, затем в jsp page вызовите этот URL для загрузки изображения.

<img class="mySlides" src="/users/getProfilePic/${imageUniqueIdURL}" />
...