getResourceAsStream返回NullpointException(spring4)

时间:2017-04-20 08:54:43

标签: java spring spring-mvc fileinputstream

@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

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

图像位于src / main / webapp / resources / img文件夹中,

存储的文件路径类似于“/img/xxx.png”

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

显示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)

2 个答案:

答案 0 :(得分: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()有或没有资源拖尾/

答案 1 :(得分:0)

Spring’s Resource接口是一个更有能力的接口,用于抽象对低级资源的访问。

您应该注入/自动装配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