2017-06-15 205 views
0

下面是测试代码,它直到现在都工作得非常好,但它现在抛出了下面提到的异常。com.fasterxml.jackson.databind.JsonMappingException由于新的maven条目

import com.google.gson.JsonObject; 
import com.google.gson.JsonParser; 
import static io.restassured.RestAssured.given; 
import io.restassured.response.Response; 

RequestSpecification spec = new RequestSpecBuilder().setBaseUri(someBaseUri).setBasePath(someEndpoint).build(); 
JsonParser parser = new JsonParser(); 
JsonObject jsonObject = parser.parse("{\r\n\"otp\":\""+sentOtp+"\",\r\n\"otpToken\":\""+otpToken+"\"\r\n}").getAsJsonObject(); 
response = given().spec(spec).headers("key","value").body(jsonObject).when().post(); //the exception is thrown at this line 

下面是异常跟踪:

com.fasterxml.jackson.databind.JsonMappingException: JsonObject (through reference chain: com.google.gson.JsonObject["asString"]) 
    at com.google.gson.JsonElement.getAsString(JsonElement.java:191) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.get(BeanPropertyWriter.java:679) 
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:534) 
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:597) 
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:142) 
    at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:118) 
    at com.fasterxml.jackson.databind.ObjectMapper.writeValue(ObjectMapper.java:1819) 
    at com.fasterxml.jackson.databind.ObjectMapper$writeValue$0.call(Unknown Source) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133) 
    at io.restassured.internal.mapping.Jackson2Mapper.serialize(Jackson2Mapper.groovy:53) 
    at io.restassured.internal.mapping.Jackson2Mapper.serialize(Jackson2Mapper.groovy) 
    at io.restassured.mapper.ObjectMapper$serialize.call(Unknown Source) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125) 
    at io.restassured.internal.mapping.ObjectMapping.serializeWithJackson2(ObjectMapping.groovy:181) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) 
    at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite$StaticMetaMethodSiteNoUnwrapNoCoerce.invoke(StaticMetaMethodSite.java:151) 
    at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.callStatic(StaticMetaMethodSite.java:102) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:56) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:194) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:214) 
    at io.restassured.internal.mapping.ObjectMapping.serialize(ObjectMapping.groovy:130) 
    at io.restassured.internal.mapping.ObjectMapping$serialize.call(Unknown Source) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) 
    at io.restassured.internal.RequestSpecificationImpl.body(RequestSpecificationImpl.groovy:829) 
    ... 

在某些隔离和审查提交我的测试项目的历史,我发现,删除下面的代码块神奇地解决问题,而将其回在pom.xml中让我再次遇到原始问题。

<dependency> 
    <groupId>io.rest-assured</groupId> 
    <artifactId>json-schema-validator</artifactId> 
    <version>3.0.3</version> 
    </dependency> 
    <dependency> 
    <groupId>com.github.fge</groupId> 
    <artifactId>json-schema-validator</artifactId> 
    <version>2.2.6</version> 
    </dependency> 
    <dependency> 
    <groupId>com.github.fge</groupId> 
    <artifactId>json-schema-core</artifactId> 
    <version>1.2.5</version> 
    </dependency> 

请帮忙。

回答

0

如果你想通过GSON你必须显式指定串行:

given().log().all().contentType(ContentType.JSON).headers("key", "value").body(jsonObject, ObjectMapperType.GSON).when().post(); 

其实contentType(ContentType.JSON)会让你的输出美化

+0

啊!我不知道。谢谢(你的)信息。然而,作为一种解决方法,我修改了我的代码以直接传递字符串,而不是将它作为JsonObject传递给'body()'方法。但我会接受你的回答,因为这对我来说也适用。 :) –

+0

是的,直接传递一个字符串是更简单的方法。 – RocketRaccoon