2014-11-04 9 views
1

У меня есть RESTful API для приложения Spring Boot. Я столкнулся с этим, когда пытался выяснить отдельный вопрос, связанный с попыткой добавить пользовательские типы мультимедиа.Swagger-UI не распознает приложение/hal + json

После попытки сделать это у меня возникло исключение HttpMediaTypeNotAcceptable, когда я пытаюсь просмотреть документацию по API. Это исключение видно только в журналах (если я перехожу на уровень до DEBUG). В браузере я вижу 406 undefined. Вот скриншот:

enter image description here

Исключение я получаю из журналов Spring ботинка это:

2014-11-04 10:08:26.189 DEBUG 5496 --- [nio-8080-exec-9] .w.s.m.s.DefaultHandlerExceptionResolver : Resolving exception from handler [public org.springframework.http.ResponseEntity<com.wordnik.swagger.model.ResourceListing> com.mangofactory.swagger.controllers.DefaultSwaggerController.getResourceListing(java.lang.String)]: org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation 

Корня проблемы заключается в том, что существующие, производимых СМИ-типы перезаписаны.

Без кода выше, список содержит:

  • application/hal+json
  • application/json;charset=UTF-8
  • application/*+json;charset=UTF-8.

С моими изменениями, список содержит только application/hal+json и мой пользовательский медиа-тип. Так что же происходит, что весна не может найти совместимый медиа-типа на всех, потому что Сваггер UI имеет application/json в его Accept: заголовок, тогда как http://localhost:8080/api-docs вендов application/hal+json (я проверил с помощью завиток):

HTTP/1.1 200 OK 
Server: Apache-Coyote/1.1 
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 
X-Application-Context: application 
Content-Type: application/hal+json 
Transfer-Encoding: chunked 
Date: Tue, 04 Nov 2014 16:56:57 GMT 

Я предполагаю, что Форс UI должен вероятно, установите заголовок accept в application/json,application/hal+json или, возможно, используйте подстановочный знак, например application/*+json.

ответ

1

Текущее решение было бы обновить swagger-client.js - Часть, где построен SwaggerClient, она жестко закодирована с помощью приложения/json в качестве типа mime.

Текущая строка кода https://github.com/swagger-api/swagger-ui/blob/master/dist/lib/swagger-client.js#L335, хотя это, очевидно, может изменяться в разных версиях (поэтому, возможно, это не относится к будущему при чтении этого ответа).

Swagger-client.js существует в двух местах - каталог/dist/lib для предварительно созданного приложения или непосредственно под/lib для процесса сборки. Вы должны изменить значение в зависимости от того, что используете.

+0

В настоящее время это исправляет проблему. Огромное спасибо! Мне все еще нужно выяснить, почему все эти другие конвертеры сообщений тоже сдуваются. –

+0

Ссылка не актуальна в текущей версии. У кого-нибудь есть исправление для текущей версии? –

+0

@MichalPaszkiewicz - код значительно изменился с тех пор (должен был использовать ссылку на прямой хеш, мои извинения). Найти местоположение сейчас займет немного времени, хотя я не уверен, что проблема остается в текущей версии. – Ron

Смежные вопросы