使用spring boot hibernate和JPA显示图像

时间:2017-05-25 06:43:08

标签: hibernate spring-mvc spring-boot spring-data-jpa thymeleaf

当我尝试从产品对象添加Base64中的图像时,如下一步:

   <tbody>
      <tr th:each="product : ${products}">
        <td><img th:src="@{'data:image/png;base64,' + ${product.image}}" /></td>
        <td th:text="${product.name}"></td>
        <td th:text="${product.price}"></td>
        <td th:if="${product.state==true}" th:text="Activo" style="color:green;"></td>  
        <td th:if="${product.state==false}" th:text="Bloqueado" style="color:red;"></td>
        <td><a href="#" class="btn btn-info btn-xs" data-toggle="collapse" data-target="#collapse-form">Editar</a><a href="#" class="btn btn-danger btn-xs">Eliminar</a></td>
      </tr>
  </tbody>

{$product.image}的值为[B@776a398但是如果我放入LOG.Info();这告诉我based64 string。我该如何解决?

这是我的控制器:

@GetMapping("/admin/products") 
public ModelAndView index(){

    User user = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    ModelAndView mvn = new ModelAndView();
    mvn.addObject("user",userServiceImpl.getOne(user.getUsername()));

    List<Product> products  = productServiceImpl.getAll();

    for(Product product : products)
    {
        byte[] encode = Base64.getEncoder().encode(product.getImage());
        product.setImage(encode);
        LOG.info(new String(encode));
    }

    mvn.addObject("products",products);
    mvn.setViewName(view);
    LOG.info("Se ha ingresado al controlador de productos");
    return mvn;

}

enter image description here

1 个答案:

答案 0 :(得分:0)

获得产品图片的价值时:

 <img th:src="@{'data:image/png;base64,' + ${product.image}}" />

Thymeleaf正在执行你的byte []的toString(),在java中,默认的toString()获取一些不可读的值,这就是百里香添加到src的内容。

来自官方文件:

  

Object类的toString方法返回一个由。组成的字符串   对象是实例的类的名称,at-sign   字符`@&#39;,以及散列的无符号十六进制表示   对象的代码。换句话说,此方法返回一个相等的字符串   价值:

     

getClass()。getName()+&#39; @&#39; + Integer.toHexString(hashCode())

因此,如果您需要获得与记录器中显示的相同,则可以使用将其作为String返回的方法:

public class Product {

    //...
    public String getImageEncoded() {
         return new String(this.image);
    }

}

然后在百里香中使用这种方法:

<img th:src="@{'data:image/png;base64,' + ${product.getImageEncoded()}}" />