Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JsonParseException:具有MockMVC和Maven的UTF-8中间字节0x20无效_Java_Spring_Maven_Jackson_Spring Restdocs - Fatal编程技术网

Java JsonParseException:具有MockMVC和Maven的UTF-8中间字节0x20无效

Java JsonParseException:具有MockMVC和Maven的UTF-8中间字节0x20无效,java,spring,maven,jackson,spring-restdocs,Java,Spring,Maven,Jackson,Spring Restdocs,编辑:如果删除spring restdoc代码,测试将通过maven 我正试图在SpringBootWeb应用程序中编写一个与MockMVC的集成测试 我目前只有一个测试(步骤和代码如下),如果我在IDE中运行它,它会通过,但如果由Maven执行,则会失败,并出现以下stacktrace: org.springframework.restdocs.payload.PayloadHandlingException: com.fasterxml.jackson.core.JsonParseExce

编辑:如果删除spring restdoc代码,测试将通过maven


我正试图在SpringBootWeb应用程序中编写一个与MockMVC的集成测试

我目前只有一个测试(步骤和代码如下),如果我在IDE中运行它,它会通过,但如果由Maven执行,则会失败,并出现以下stacktrace:

org.springframework.restdocs.payload.PayloadHandlingException: com.fasterxml.jackson.core.JsonParseException: Invalid UTF-8 middle byte 0x20
 at [Source: [B@3793896e; line: 30, column: 23]
        at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1419)
        at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:508)
        at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._reportInvalidOther(UTF8StreamJsonParser.java:3223)
        at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._reportInvalidOther(UTF8StreamJsonParser.java:3230)
        at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._decodeUtf8_3fast(UTF8StreamJsonParser.java:3036)
        at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._finishString2(UTF8StreamJsonParser.java:2216)
        at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._finishString(UTF8StreamJsonParser.java:2165)
        at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.getText(UTF8StreamJsonParser.java:279)
        at com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer$Vanilla.deserialize(UntypedObjectDeserializer.java:441)
        at com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer$Vanilla.mapObject(UntypedObjectDeserializer.java:574)
        at com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer$Vanilla.deserialize(UntypedObjectDeserializer.java:423)
        at com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer$Vanilla.mapArray(UntypedObjectDeserializer.java:510)
        at com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer$Vanilla.deserialize(UntypedObjectDeserializer.java:437)
        at com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer$Vanilla.mapObject(UntypedObjectDeserializer.java:552)
        at com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer$Vanilla.deserialize(UntypedObjectDeserializer.java:423)
        at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3066)
        at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2230)
        at org.springframework.restdocs.payload.JsonContentHandler.readContent(JsonContentHandler.java:81)
        at org.springframework.restdocs.payload.JsonContentHandler.findMissingFields(JsonContentHandler.java:49)
        at org.springframework.restdocs.payload.AbstractFieldsSnippet.validateFieldDocumentation(AbstractFieldsSnippet.java:112)
        at org.springframework.restdocs.payload.AbstractFieldsSnippet.createModel(AbstractFieldsSnippet.java:73)
        at org.springframework.restdocs.snippet.TemplatedSnippet.document(TemplatedSnippet.java:64)
        at org.springframework.restdocs.mockmvc.RestDocumentationResultHandler.handle(RestDocumentationResultHandler.java:101)
        at org.springframework.test.web.servlet.MockMvc$1.andDo(MockMvc.java:158)

代码:

我添加了starter测试依赖项,并为将来的所有测试创建了一个超类:

@Ignore
@MappedSuperclass
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
@ActiveProfiles(value = {"test"})
public class IntegrationTest
{
    @Autowired
    WebApplicationContext context;

    MockMvc mockMvc;

    @Rule
    public RestDocumentation restDocumentation = new RestDocumentation("target/generated-snippets");

    @Before
    public void setUp()
    {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context).apply(documentationConfiguration(this.restDocumentation)).build();
    }
}
然后我创建了这个测试:

public class PostsTest extends IntegrationTest
{
    @Test
    public void getAll() throws Exception
    {
        mockMvc.perform(get("/api/v1/posts").accept(MediaType.APPLICATION_JSON_VALUE)
            .andExpect(status().isOk())
            .andDo(document("posts-index", preprocessResponse(prettyPrint()), responseFields(
                fieldWithPath("data").description("The response payload"),
                fieldWithPath("data.[].id").description("ID"),
                fieldWithPath("data.[].title").description("Title"),
                fieldWithPath("data.[].body").description("Content"),
                fieldWithPath("data.[].type").description("Type"),
                fieldWithPath("data.[].createdAt").description("Creation date"),
                fieldWithPath("data.[].modifiedAt").description("Last edit date"),
                fieldWithPath("data.[].entityType").description("Entity type"),
                fieldWithPath("meta").description("The response metadata")
            )));
    }
}

您正在解析json,我怀疑它是从文件中读取的


该文件似乎以错误的编码保存,如ISO-8859-1。确保它保存在UTF-8、UTF-16或UTF-32中。大多数JSON解析器都在猜测前四个字节的编码,如果发现不支持的编码,就会失败。

您正在解析JSON,我怀疑它是从文件读取的


该文件似乎以错误的编码保存,如ISO-8859-1。确保它保存在UTF-8、UTF-16或UTF-32中。大多数JSON解析器都在猜测前四个字节的编码,如果发现不支持的编码,就会失败。

我发现从restdocs代码中删除
预处理响应(prettyPrint())
,测试就通过了


编辑:正如Andy Wilkinson在评论中所报告的那样,这个bug是用
1.0.2.BUILD-SNAPSHOT
版本的
spring restdocs
修复的。我发现从restdocs代码中删除
预处理响应(prettyPrint())
,测试就通过了


编辑:正如Andy Wilkinson在评论中所报告的,该漏洞已通过
1.0.2版本得到修复。spring restdocs的BUILD-SNAPSHOT
从MySQL数据库中提取数据。我不明白的是maven和IDE之间的区别。IDE可能使用UTF-8,而maven在命令提示符下运行时使用平台编码(在windows机器上仍然是ISO-8859-1或Latin1)。尝试将
-Dfile.encoding=“UTF-8”
添加到命令行语句中,查看它是否有任何更改。没有更改,我的pom中已经有
UTF-8
。问题是从数据库读取。我建议的选项和您在pom.xml中的设置不会影响数据库的内容。。。您可以发布从数据库读取json所涉及的代码吗?我使用Spring数据和Spring MVC,因此Jackson将模型序列化为json。(我编辑了这个问题,因为如果我删除SpringRestDoc代码,测试就通过了maven。)数据来自MySQL数据库。我不明白的是maven和IDE之间的区别。IDE可能使用UTF-8,而maven在命令提示符下运行时使用平台编码(在windows机器上仍然是ISO-8859-1或Latin1)。尝试将
-Dfile.encoding=“UTF-8”
添加到命令行语句中,查看它是否有任何更改。没有更改,我的pom中已经有
UTF-8
。问题是从数据库读取。我建议的选项和您在pom.xml中的设置不会影响数据库的内容。。。您可以发布从数据库读取json所涉及的代码吗?我使用Spring数据和Spring MVC,因此Jackson将模型序列化为json。(我编辑了这个问题,因为如果我删除SpringRestDoc代码,测试将通过maven。)听起来像是这样。它已在1.0.2快照中修复。如果你想试一试的话,他们可以从。使用
1.0.2.BUILD-SNAPSHOT
作为版本。这是正确的。它适用于快照版本。谢谢听起来像。它已在1.0.2快照中修复。如果你想试一试的话,他们可以从。使用
1.0.2.BUILD-SNAPSHOT
作为版本。这是正确的。它适用于快照版本。谢谢