当我尝试使用 swagger 和 jersey 来解释响应时,生成的 rest 客户端包含:
应用程序/xml;字符集=utf-8
我得到以下异常:
org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyReader not found for media type=application/xml;charset=utf-8, type=class com.company.rest.client.model.generated.Result, genericType=class com.company.rest.client.model.generated.Result. at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:232)
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:156)
at org.glassfish.jersey.message.internal.MessageBodyFactory.readFrom(MessageBodyFactory.java:1091)
at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:874)
at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:834)
at org.glassfish.jersey.client.ClientResponse.readEntity(ClientResponse.java:363)
at org.glassfish.jersey.client.InboundJaxrsResponse$2.call(InboundJaxrsResponse.java:126)
at org.glassfish.jersey.internal.Errors.process(Errors.java:316)
at org.glassfish.jersey.internal.Errors.process(Errors.java:298)
at org.glassfish.jersey.internal.Errors.process(Errors.java:229)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:389)
at org.glassfish.jersey.client.InboundJaxrsResponse.runInScopeIfPossible(InboundJaxrsResponse.java:264)
我尝试了在 swagger yaml 中定义消费的不同方法,例如:
- 应用程序/xml
- 应用程序/xml;字符集=utf-8
- 应用程序/xml;charset=utf-8
- 应用程序/xml,字符集=utf-8
...
大摇大摆的yaml:
swagger: '2.0'
info:
description: REST API
version: '1.0'
title: REST API
contact:
email: support@company.com
host: setinproperties
basePath: /api/v1
schemes:
- https
consumes:
- application/xml;charset=UTF-8
produces:
- application/xml
definitions:
Result:
type: object
required:
- DateTime
- Key
- Value
properties:
DateTime:
type: string
format: date-time
Key:
type: string
Value:
type: string
paths:
'/result':
get:
summary: getResult
operationId: getResult
description: 'description'
responses:
200:
description: success
schema:
$ref: '#/definitions/Result'
400:
description: bad request
schema:
$ref: '#/definitions/Result'
500:
description: internal server error
schema:
$ref: '#/definitions/Result'
有效载荷示例:
<?xml version="1.0" encoding="utf-8"?>
<Result>
<DateTime>2018-06-19T07:50:21.8688563Z</DateTime>
<Key>a key</Key>
<Value>a value</Value>
</Result>
Pom.xml 代码生成部分
<plugin>
<groupId>io.swagger</groupId>
<artifactId>swagger-codegen-maven-plugin</artifactId>
<version>${swagger-codegen-maven-plugin.version}</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>${project.basedir}/src/main/resources/api.yml</inputSpec>
<language>java</language>
<library>jersey2</library>
<output>${project.build.directory}/generated-sources</output>
<apiPackage>${default.package}.handler.generated</apiPackage>
<modelPackage>${default.package}.model.generated</modelPackage>
<invokerPackage>${default.package}.handler.generated</invokerPackage>
<generateApiTests>false</generateApiTests>
<generateApiDocumentation>false</generateApiDocumentation>
<generateModelTests>false</generateModelTests>
<configOptions>
<sourceFolder>src/main/java</sourceFolder>
<dateLibrary>joda</dateLibrary>
</configOptions>
</configuration>
</execution>
</executions>
</plugin>
我怎样才能做到这一点?
使用 Swagger 2.0 版、swagger-code-gen 2.3.1 版和 Jersey lib 2.27 版