Spring云契约正则表达式(nonBlank())生成控制符号

时间:2018-01-15 15:19:42

标签: java groovy spring-cloud spring-cloud-contract

为什么Spring云契约中的regex(nonBlank())有时会生成像\ u0008这样的控制符号,这会破坏生成的java文件的编译?这使得nonBlank()类型不可靠且不可用。我可以指定自己的正则表达式,如[a-z]*,但它也可以方便地覆盖非ascii unicode符号。

合同示例:

package contracts.api
import org.springframework.cloud.contract.spec.Contract
Contract.make {
  request {
    method 'GET'
    urlPath('/v1/users') {
      queryParameters {
        parameter 'userId': value(regex(nonBlank()))
      }
    }
  }
  response {
    status 200
  }
}

1 个答案:

答案 0 :(得分:0)

每当您只传递正则表达式时,Spring Cloud Contract使用一个名为Xeger的库来生成与该正则表达式匹配的具体值。有时它会产生这样的价值。

所以IMO在这种情况下,最好使用$(anyNonBlankString())(而不是value(regex(nonBlank())))我们设置String的固定值(例如向其添加一个随机数)而不是生成它来自正则表达式。