[英]RestTemplate received response not in json
在 spock 中為我的 rest api 編寫集成測試時,我遇到了響應內容類型的問題。 對於 swagger 或 postman 沒有問題。 它只發生在集成測試中。
從測試開始記錄:
18:24:57.101 [Test worker] DEBUG org.springframework.web.client.RestTemplate - HTTP POST http://localhost:8080/login
18:24:57.110 [Test worker] DEBUG org.springframework.web.client.RestTemplate - Accept=[text/plain, application/json, application/*+json, */*]
18:24:57.138 [Test worker] DEBUG org.springframework.web.client.RestTemplate - Writing [{login=test, password=test}] as "application/json"
18:24:57.282 [Test worker] DEBUG org.springframework.web.client.RestTemplate - Response 200 OK
18:24:57.284 [Test worker] DEBUG org.springframework.web.client.RestTemplate - Reading to [java.lang.String] as "application/json;charset=ISO-8859-1"
這是來自服務器的響應
<200,###BODY###,[Vary:"Origin", "Access-Control-Request-Method", "Access-Control-Request-Headers", Authorization:###JWT_TOKEN###, X-Content-Type-Options:"nosniff", X-XSS-Protection:"1; mode=block", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Frame-Options:"DENY", Content-Type:"application/json;charset=ISO-8859-1", Transfer-Encoding:"chunked", Date:"Sun, 31 Jan 2021 16:58:29 GMT", Keep-Alive:"timeout=60", Connection:"keep-alive"]>
結果我顯然收到了:
無法確定當前字符,它不是字符串、數字、數組或 object
這是我的測試:
def 'should login player' (){
given:
def credentials = [
"login" : "test",
"password": "test"
]
when:
def response = sendPost(credentials, "login", String.class)
def body = parseResponse(response)
then:
(body.Authentication as String).contains("Bearer")
}
def rest = new RestTemplate()
def headers = new HttpHeaders()
def url = "http://localhost:8080/"
def setup() {
rest.messageConverters.add(new FormHttpMessageConverter())
rest.messageConverters.add(new StringHttpMessageConverter())
headers.setContentType(APPLICATION_JSON)
headers.remove("Accept")
headers.add("Accept", APPLICATION_JSON_VALUE)
}
def sendPost(def body, String endpoint, Class returnType) {
def httpEntity = new HttpEntity<>(body, headers)
rest.postForEntity((url + endpoint), httpEntity, returnType)
}
不明白為什么在日志中我可以看到 Accept=[text/plain, application/json, application/*+json, /]
如果我只設置應用程序/json。 即使在successfulyAuthentication 方法中將 contentType 設置為 json 也無濟於事。
知道我做錯了什么嗎?
不好意思推遲了。
是的,問題是 parseResponse 的參數。 我一直在研究整體反應,而不僅僅是身體。
它應該看起來像def body = parseResponse(response.body)
感謝您花時間調查它!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.