Groovy DSL Spring云契约抛出java。具有Unicode字符的查询参数的lang.IllegalStateException
我创建了一个groovy DSL合同,如下所示
import org.springframework.cloud.contract.spec.Contract
Contract.make {
final def NAME_REGEX = '[A-Za-z0-9\\u00C0-\\u00FF\'\\- ]{1,70}'
request {
method 'GET'
url('/api/getEmployess') {
queryParameters {
parameter 'name': $(c(regex(NAME_REGEX)), p('\u00CAdward J\u00F5hnson'))
}
}
headers {
contentType("application/json;charset=UTF-8")
}
}
response {
status OK()
body([
[
id : $(p(regex(nonBlank())), c('5a0eaf2012a9a12f1c98947a')),
name : fromRequest().query("name")
]
])
headers { contentType("application/json;charset=UTF-8") }
}
}
我的服务实现在响应中返回'name'和'id'。作为响应,“name”是Unicode值“Êdward Jõhnson”,它与请求参数值不匹配
我正在犯错误-
Parsed JSON [[{"id":"5a0eaf2012a9a12f1c98947a","name":"Êdward Jõhnson"}]] doesn't match the JSON path [$[*][?(@.['name'] == 'Êdward Jõhnson')]]
java.lang.IllegalStateException: Parsed JSON [[{"id":"5a0eaf2012a9a12f1c98947a","name":"Êdward Jõhnson" }]] doesn't match the JSON path [$[*][?(@.['name'] == 'Êdward Jõhnson')]]
at com.toomuchcoding.jsonassert.JsonAsserter.check(JsonAsserter.java:228)
at com.toomuchcoding.jsonassert.JsonAsserter.checkBufferedJsonPathString(JsonAsserter.java:267)
我尝试在'name'请求查询参数中以两种方式传递Unicode值-
- 如上例所示,将Unicode字符作为Unicode数字- 参数“name”:$(c(regex(name_regex)),p(“\u00CAdward J\u00F5hnson”)
- 按原样放置Unicode字符 参数'name':$(c(regex(name_regex)),p('Êdwardjõhnson'))
但对于这两种情况,我得到的是相同的错误。似乎存在一些编码问题,因为我的值Êdward Jõhnson更改为Êdward Jõhnson,如错误中所述
请帮我解决这个问题
# 1 楼答案
我找到了解决办法。在响应“name”字段producer时,我输入了请求“name”字段producer中的相同值。由于groovy对unicode值应用了不同的编码,所以失败了。这只是解决问题的一个变通办法,不是一个合适的最终解决方案