Неверный заголовок ответа Content-Type в mock-сервисе Anypoint Platform RAML

Я использую платформу Mulesoft Anypoint для разработки REST API. Я ожидаю ответа JSON от REST API, но получаю ответ XML.

Я написал ниже RAML-файл -

#%RAML 1.0
baseUri: https://mocksvc.mulesoft.com/mocks/aa0b3fb6-9fd7-4196-991e-d030a25bc84b # 
title: American Flights API
version: 1.0
mediaType: application/json

/flights:
  post:
    body:
      application/json:
        example:
          {
            "code": "GQ574",
            "price": 399,
            "departureDate": "2016/12/20",
            "origin": "ORD",
            "destination": "SFO",
            "emptySeats": 200,
            "plane": {"type": "Boeing 747", "totalSeats": 400}
          }
    responses: 
      201:
        body:
          application/json:
            example: | 
              {"Message": "Flight added (but not really)"}

Я получаю ответ, как показано ниже -

<response>
<Message>Flight added (but not really)
</Message>
</response>

В моем теле ответа RAML я упомянул application / json. Поэтому не уверен, почему он не показывает ответ JSON, который я написал в примере, а также почему он возвращает «application / xml» в коде ответа, когда я нигде не упомянул «application / xml».

Заголовки ответа имеют Content-Type "application / xml"

content-type:
application/xml; charset=utf-8
date:
Tue, 20 Feb 2018 15:54:26 GMT
server:
nginx
vary:
X-HTTP-Method-Override, Accept-Encoding
x-newrelic-app-data:
PxQFUVNQCwQTUVhXDwcDUFITGhE1AwE2QgNWEVlbQFtcCxYkSRFBBxdFXRJJM3dgZEtOPGttGAsLUl1APjpMSh5IB0sQZGgdHU8QRR5DH1JIBhlRV1MLBQlXVlcbEwBQRh0UVVEHAAYBAVkECg8FCgNHFQdQDUAHOQ==
x-powered-by:
Express
x-request-id:
7a6ebcf4-cc45-491c-8622-00fad8ef3a3e
content-length:
76
connection:
keep-alive

Я хочу знать, как я могу в ответ изменить Content-Type на application / json.

Пожалуйста помоги.


person Kuldeep Singh Rawat    schedule 21.02.2018    source источник


Ответы (3)


Указанный тип содержимого в теле должен быть application / json вместо application / xml.

responses: 
      201:
        body:
          application/json:
            example: | 
              {"Message": "Flight added (but not really)"}
person mulosky    schedule 21.02.2018
comment
Спасибо mulosky за ваш ответ. Извините, application / xml оставлен по ошибке, так как я пытался увидеть множественный ответ, то есть xml и json. он возвращал ответ, написанный в разделе application / xml. Я по ошибке неправильно оставил application / xml вместо application / json. - person Kuldeep Singh Rawat; 21.02.2018

В вашем коде для установки типа содержимого вы можете попробовать добавить построитель HTTP-ответов в свой HTTP-компонент.

<http:listener config-ref="HTTP_Listener_Configuration" path="/sample" allowedMethods="get" doc:name="HTTP" >
     <http:response-builder>
         <http:header headerName="Content-Type" value="application/json"/>
     </http:response-builder>
</http:listener>

Или попробуйте использовать компонент свойства в конце вашего потока

<set-property propertyName="Content-Type" value="application/json" doc:name="Property"/>
person ryananthonyandal    schedule 24.02.2018
comment
Я не думаю, что мы можем поместить эти теги в RAML. Пожалуйста, предложите, как мы можем установить их в RAML. Я уже пробовал установить для mediaType значение application / json на корневом уровне, но это не сработало. - person Kuldeep Singh Rawat; 28.02.2018

Раньше я использовал Mozilla firefox, и у меня возникла проблема, связанная с тем, что служба возвращала ответ в «application / xml» вместо «application / json», который я написал в RAML.

Теперь я вхожу в систему на платформе Anypoint в Chrome, и в Chrome все работает нормально. Мок-сервис возвращает ответ, представленный в примере, в формате JSON.

Все еще не уверен, почему в разных браузерах он ведет себя по-разному.

person Kuldeep Singh Rawat    schedule 28.02.2018