我试图用ServletContext返回一个图像,但出现500个错误,控制台显示:
java.lang.NullPointerException: null at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:2146) 在 org.apache.commons.io.io.ioUtils.copy(IOUtils.java:2102) 在 org.apache.commons.io.io.utils.copylarge(IOUtils.java:2123) 在 org.apache.commons.io.IOUtils.copy(IOUtils.java:2078) 在 org.apache.commons.io.IOUtils.toByteArray(IOUtils.java:721)
配置:
@Configuration
public class ImageConfiguration {
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(byteArrayHttpMessageConverter());
}
@Bean
public ByteArrayHttpMessageConverter byteArrayHttpMessageConverter() {
ByteArrayHttpMessageConverter arrayHttpMessageConverter = new ByteArrayHttpMessageConverter();
arrayHttpMessageConverter.setSupportedMediaTypes(getSupportedMediaTypes());
return arrayHttpMessageConverter;
}
private List<MediaType> getSupportedMediaTypes() {
List<MediaType> list = new ArrayList<MediaType>();
list.add(MediaType.IMAGE_JPEG);
list.add(MediaType.IMAGE_PNG);
list.add(MediaType.APPLICATION_OCTET_STREAM);
return list;
}
}
服务:
@Service
public class ImageService {
@Autowired
ServletContext servletContext;
public byte[] getRankImage (String id) throws IOException {
byte[] b;
InputStream in;
if (id.equals("0")) {
in = servletContext.getResourceAsStream("images/level-0.png");
return IOUtils.toByteArray(in);
restful服务:
@RequestMapping(value = "/level/{id}", method = RequestMethod.GET)
public ResponseEntity<byte[]> getImage(@PathVariable("id") String id) {
byte[] imageBytes;
try {
imageBytes = imageService.getRankImage(id);
return ResponseEntity.ok().contentType(MediaType.IMAGE_PNG).body(imageBytes);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
图像位于资源中 -
---------更新1-------
在http://www . xyzws . com/servlet FAQ/how-to-use-servletcontextgetresourceasstreamjavalangstring-path/18中,该行
in = servletContext.getResourceAsStream("images/level-0.png");
在图像前应该有一个/
在图像服务类中
,您自动连接 ServletContext
实例。
Spring容器不会自动连接servletContext
,因为它不是springbeanServletContext
来自javax。servlet包。
您可以使用 setter 方法注入实例,如下所示。
@Service
public class ImageService implements ServletContextAware{
private ServletContext context;
public void setServletContext(ServletContext servletContext) {
this.context = servletContext;
}
// use `context` object to get the image and pass to IOUtils.toByteArray method
}
通过实现ServletContextAware接口,Spring将为您注入它。
理想情况下,我们不应该将ServletContext
实例注入Controller
layer之外。这里,我们在服务层中注入,这不是推荐的方法。
希望这有帮助!
我正在使用routerLink返回我的页面。 当前路线可以有3个级别: 此外,我有一些不同的组件,所以它不一定总是父级,它可以是parent1或parent2,也可以是子级和孙级,例如: 我想要的总是转到上一级,例如: 我所做的是: 但它总是导航到“myurl.com” 我如何解决它? 正如一些用户所建议的,我正在共享我的路由配置: 应用程序内。路由。ts: 在父级中。路由。ts: 如果我在浏览器
数据库中的每一行都是这样的 现在我想这样返回上面的数据 我将Spring的JdbcTemplate与行映射器一起使用,但我只能得到所有行的列表。由于我无法在RowMapper中维护我的主映射(我可以在RowMapper类中有一个静态映射吗?但我不希望它是静态的,因为这是一个webservice,后续调用可能会出错。),我只能选择获取该行列表,然后使用逻辑创建所需的集合。 我开始了解,但我找不到如何
我正在使用Spring boot来渲染页面。我也使用了叶子。但是我在从浏览器调用它时得到了下面提供的异常。 我已经编写了视图解析器类,当我使用为此。 和我在应用程序中提到的一样。yml也是。应用yml是 这是我的Controller类,负责渲染index.jspMainController.class
问题内容: 我正在为我的网站创建自动完成功能。到目前为止,javascript部分已经结束。另外,我可以获取匹配用户的MembershipUser对象。 我需要以以下格式返回JSON: 这是ashx中的代码: 如何以所需格式返回json?谢谢。 问题答案:
我正在尝试使用wp rest api返回一个博客帖子列表,包括标题、摘录和特色图片。使用下面的方法,我可以返回标题和摘录,但特征图像会导致致命错误:无法将stdClass类型的对象用作数组。 有人能告诉我我做错了什么吗?
问题内容: 我有以下简单的看法。为什么会导致此错误? 问题答案: 因为视图必须 返回 ,而不仅仅是调用它。将最后一行更改为