MockServer:解析JSON时出现IllegalArgumentException

时间:2018-03-15 11:57:59

标签: jackson mockserver

当我尝试使用MockServer模拟外部HTTP API时,mockserver会返回java.lang.IllegalArgumentException

这是测试代码:

new MockServerClient("localhost", 1080)
    .when(request("/messages")
    .withMethod("POST")
    .withQueryStringParameters(
        param("subject", "integration-test-subject")
    )
).respond(response().withStatusCode(200));

这是一个例外:

java.lang.IllegalArgumentException: Exception while parsing 
[  
   {  
      "httpRequest":{  
         "method":"POST",
         "path":"/messages",
         "queryStringParameters":{  
            "subject":[  
               "integration-test-subject"
            ]
         }
      },
      "httpResponse":{  
         "statusCode":200
      },
      "times":{  
         "remainingTimes":0,
         "unlimited":true
      },
      "timeToLive":{  
         "unlimited":true
      }
   }
] for Expectation

这是杰克逊的例外:

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.lang.String` out of FIELD_NAME token
at
[  
   Source:(String)"   {  
      "httpRequest":{  
         "method":"POST",
         "path":"/messages",
         "queryStringParameters":{  
            "subject":[  
               "integration-test-subject"
            ]
         }
      },
      "httpResponse":{  
         "statusCode":200
      },
      "times":{  
         "remainingTimes":0,
         "unlimited":true
      },
      "timeToLive":{  
         "unlimited":true
      }
   }

我正在尝试使用正文

发送application/x-www-form-urlencoded请求
subject:integration-test-subject

如果测试中没有.withQueryStringParameters(param("subject", "integration-test-subject")),则表示正常。

如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

这是GitHub中的一个问题,并带有解释

https://github.com/jamesdbloom/mockserver/issues/451

您只需更新到5.4.1

答案 1 :(得分:0)

此问题的解决方案是添加到您的项目中:

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.3</version>
    </dependency>

我的Spring Boot 2项目,这个解决方案运行良好。