在tomcat war中访问JSON文件并读取它

时间:2018-03-03 18:53:47

标签: spring-mvc

我想在我的webapp中读取放置在resources/data/info.json中的json文件。知道需要使用Convertor.class.getResourceAsStream("\\WEB-INF\\classes\\data\\Address.json");其中Convertor是我的util类由于某种原因无法读取文件,我看到InputStream返回null并且我看到以下异常:

com.fasterxml.jackson.databind.exc.MismatchedInputException: No content to map due to end-of-input
 at [Source: UNKNOWN; line: 1, column: 0]
        at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)
        at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4133)
        at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3988)
        at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3058)
        at com.wf.hrca.util.Convertor.unMarshal(Convertor.java:84)

1 个答案:

答案 0 :(得分:0)

resources是开发计算机上源项目的文件夹。 Tomcat并不关心源项目的外观。顺便说一句,当您将应用程序部署到生产环境中时,机器上不会有任何源项目。

所有Tomcat关心的都是您部署的war文件。在这个war文件中,WEB-INF / classes目录以及WEB-INF / lib下的所有jar文件构成了应用程序的类路径。

Convertor.class.getResourceAsStream(),正如javadoc所解释的那样(但你真的需要阅读它才知道)需要一个/ - 分隔的路径。如果路径以/开头,那么路径从类路径的一个根开始(即/引用WEB-INF / classes,以及WEB的每个jar文件的根目录 - INF / lib目录)。

因此,找到war文件中json文件的位置。如果它在/WEB-INF/classes/data/info.json下,那么您应该使用

Convertor.class.getResourceAsStream("/data/info.json");