2017-04-20 117 views
1
@RequestMapping(value = "/all", method = RequestMethod.GET) 
public ResponseEntity<List<ItemVO>> listAll() { 
    ResponseEntity<List<ItemVO>> entity = null; 
    try { 


     List<ItemVO> list=service.listAll(); 
     for(ItemVO i : list){ 
      InputStream in = getClass().getClassLoader().getResourceAsStream(i.getFilepath_img()); 

      i.setByte_img(IOUtils.toByteArray(in)); 

     } 
      final HttpHeaders headers = new HttpHeaders(); 
      headers.setContentType(MediaType.IMAGE_PNG); 
     entity = new ResponseEntity<List<ItemVO>>(list, HttpStatus.OK); 

    } catch (Exception e) { 
     // TODO: handle exception 
     e.printStackTrace(); 
     entity = new ResponseEntity<>(HttpStatus.BAD_REQUEST); 
    } 

    return entity; 
} 

VO的getResourceAsStream返回NullpointException(spring4)

public class ItemVO{ 
    private int item_id; 
    private String filepath_img; 
    private byte[] byte_img; 
} 

的图像位于的src /主/ web应用/资源/ IMG文件夹,

存储的文件路径是如“/ IMG/XXX巴纽”

我不知道该怎么办 堆栈跟踪:

的java .lang.NullPointerException

at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:2146) 

at org.apache.commons.io.IOUtils.copy(IOUtils.java:2102) 

at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:2123) 

at org.apache.commons.io.IOUtils.copy(IOUtils.java:2078) 

at org.apache.commons.io.IOUtils.toByteArray(IOUtils.java:721) 
+0

你检查过'i.getFilepath_img()'返回路径吗? –

+0

是的,我做得很好 – hsyou

+0

试着用这个路径检查目的'main/webapp/resources/img/xxx.png' –

回答

1

webapp/resources/..不在类路径中。您可以通过使用ServletContext

注入它解决这个问题:

@Autowired 
private ServletContext servletContext; 

然后得到InputStream

InputStream in = servletContext.getResourceAsStream(i.getFilepath_img()); 

此代码假定:

  • getFilepath_img()返回绝对路径你的webapp上下文的亲戚,例如。 /resources/img/xxx.png。如果不是,你应该预先设定路径,例如。 "/resources/" + i.getFilepath_img()有或没​​有拖尾/
+0

谢谢你的工作! – hsyou

0

Spring’s Resource接口资源是指为用于提取访问底层资源一个更强大的接口。

您应该注入/ autowire ResourceLoader并使用它来获取资源。所有的应用程序上下文都实现了ResourceLoader接口,因此所有的应用程序上下文都可以用来获取Resource实例。

例如:

@Autowired 
private ResourceLoader context; 

然后:

Resource image = context.getResource(i.getFilepath_img()); 
InputStream is = image.getInputStream(); 
... 

这将使你指定为URL,文件或类路径资源的文件路径,还是让如果依赖一个潜在的ApplicationContext上。有关更多信息,请参阅Table 8.1 Resource Strings

相关问题