Spring 引导/Micronaut - windows 上的 Jacksondatabind 错误

Spring Boot / Micronaut - Jacksondatabind error on windows

我正在尝试 运行 Micronaut/Spring 通过 Gradle 在 Windows 上启动的简单示例,但出现以下异常:


    "C:\Program Files\Java\jdk1.8.0_171\bin\java.exe" -javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2018.1.5\lib\idea_rt.jar=53492:C:\Program Files\JetBrains\IntelliJ IDEA 2018.1.5\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_171\jre\lib\charsets.jar;com.home.examples.poster.Application
17:45:20.913 [main] ERROR io.micronaut.runtime.Micronaut - Error starting Micronaut server: I/O exception occurred reading [application.json]: Unexpected character (''' (code 39)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
 at [Source: (ByteArrayInputStream); line: 1, column: 2]
io.micronaut.context.exceptions.ConfigurationException: I/O exception occurred reading [application.json]: Unexpected character (''' (code 39)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
 at [Source: (ByteArrayInputStream); line: 1, column: 2]
    at io.micronaut.context.env.AbstractPropertySourceLoader.loadProperties(AbstractPropertySourceLoader.java:98)
    at io.micronaut.context.env.AbstractPropertySourceLoader.load(AbstractPropertySourceLoader.java:66)
    at io.micronaut.context.env.DefaultEnvironment.loadPropertySourceFromLoader(DefaultEnvironment.java:487)
    at io.micronaut.context.env.DefaultEnvironment.readPropertySourceList(DefaultEnvironment.java:430)
    at io.micronaut.context.DefaultApplicationContext$RuntimeConfiguredEnvironment.readPropertySourceList(DefaultApplicationContext.java:542)
    at io.micronaut.context.env.DefaultEnvironment.readPropertySources(DefaultEnvironment.java:355)
    at io.micronaut.context.env.DefaultEnvironment.start(DefaultEnvironment.java:246)
    at io.micronaut.context.env.DefaultEnvironment.start(DefaultEnvironment.java:66)
    at io.micronaut.context.DefaultApplicationContext.startEnvironment(DefaultApplicationContext.java:184)
    at io.micronaut.context.DefaultApplicationContext.start(DefaultApplicationContext.java:142)
    at io.micronaut.runtime.Micronaut.start(Micronaut.java:67)
    at io.micronaut.runtime.Micronaut.run(Micronaut.java:274)
    at io.micronaut.runtime.Micronaut.run(Micronaut.java:260)
    at com.home.examples.poster.Application.main(Application.java:8)
Caused by: com.fasterxml.jackson.core.JsonParseException: Unexpected character (''' (code 39)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
 at [Source: (ByteArrayInputStream); line: 1, column: 2]
    at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1804)
    at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:693)
    at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:591)
    at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._handleUnexpectedValue(UTF8StreamJsonParser.java:2630)
    at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._nextTokenNotInObject(UTF8StreamJsonParser.java:832)
    at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:729)
    at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4141)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4000)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3084)
    at io.micronaut.jackson.env.JsonPropertySourceLoader.processInput(JsonPropertySourceLoader.java:56)
    at io.micronaut.context.env.AbstractPropertySourceLoader.read(AbstractPropertySourceLoader.java:111)
    at io.micronaut.context.env.AbstractPropertySourceLoader.loadProperties(AbstractPropertySourceLoader.java:96)
    ... 13 common frames omitted

Process finished with exit code 1

我在 Spring Boot 2.1+ 中看到了这个错误,但不知道 where/why 它是在 "should" 从 application.yml 读取时发生的。调试我看到它在哪里抛出异常但它不是我什至在项目中读取的文件。即使我使 "application.json" 它读取文件,但仍然因上述错误而失败。

我拥有的库:

annotationProcessor "io.micronaut:micronaut-inject-java"
compile "io.micronaut:micronaut-http-client"
compile "io.micronaut:micronaut-http-server-netty"
compile "io.micronaut:micronaut-inject"
compile "io.micronaut:micronaut-runtime"
compileOnly "io.micronaut:micronaut-inject-java"
runtime "ch.qos.logback:logback-classic:1.2.3"
testCompile "junit:junit:4.12"
testCompile "io.micronaut:micronaut-inject-java"
jackson-databind is 2.9.8 (included in the micronaut deps)

我认为您没有正确使用 -Dmicronaut.config.files=application.yml。该设置需要磁盘上文件的绝对路径。如果你想让 src/main/resources/application.yml 被阅读,那将自动完成。

所以在看到另一页关于使用 JSON 进行 spring 应用程序设置的评论后,最终弄明白了。

原来我有一个环境变量 SPRING_APPLICATION_JSON 设置格式不正确,因此它抛出了这个错误。一旦我取出它并重新启动我的 IDE,现在一切正常。