当前位置: 首页 > 知识库问答 >
问题:

没有转换器的[...]与预设的内容类型'空']与OpenApiSpring生成器

沈巴英
2023-03-14

我正在(gradle)spring boot项目中使用openAPI实现petstore API。我使用openapi生成器插件生成了一个服务器,并实现了一个简单的请求:

@Service
@RestController
public class PetApiController implements PetApi {

    @Override
    public ResponseEntity<Pet> getPetById(Long petId) {
        Pet p = new Pet();
        p.setId(0L);
        p.setName("fido");
        p.setPhotoUrls(new ArrayList<String>());
        p.setStatus(StatusEnum.AVAILABLE);
        p.setTags(new ArrayList<Tag>());
        Category c = new Category();
        c.setId(3L);
        c.setName("dummy category");
        p.setCategory(c);
        
        ResponseEntity<Pet> r = new ResponseEntity<Pet>(p, HttpStatus.OK);
        
        return r;
    }
}

我生成的swagger-ui为请求提供了xml和json查询,但是xml似乎不起作用:

$ curl -X GET "http://localhost:8080/pet/1" -H  "accept: application/xml"; echo ""

$ curl -X GET "http://localhost:8080/pet/1" -H  "accept: application/json"; echo ""
{"id":0,"name":"fido","category":{"id":3,"name":"dummy category"},"photoUrls":[],"tags":[],"status":"available"}

我甚至收到一条错误消息:

2020-09-10 09:04:34.213  WARN 23958 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotWritableException: No converter for [class com.petstore.server.model.Pet] with preset Content-Type 'null']

但是,我无法捕获此异常并打印整个上下文,它只发生在返回r

我的确切错误消息已经有问题了:Springboot HttpMessageNotWritableException:没有[…]的转换器对于预设的内容类型“null”],但我仍然认为我的上下文是不同的,因为我生成了POJO,所以我无法控制它们,而且我一开始不应该有这个问题,因为插件应该适当地生成所有内容。

共有3个答案

公西凯捷
2023-03-14

您需要在pom文件中使用以下依赖项添加对xml格式的支持:

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>2.1.1</version>
</dependency>

注:此版本为今天的最新版本。

公冶经纶
2023-03-14

对我来说,问题在于:

responses:
        "200":
          description: default response
          content:
            '*/*' # <---- here
              schema:

它应该是'application/json'

百里俭
2023-03-14

Spring生成器默认区分xml,请参阅下的留档:https://openapi-generator.tech/docs/generators/spring

Option  | Description                                       | Default
--------+---------------------------------------------------+---------
withXml | whether to include support for application/xml    | false
        | content type and include XML annotations in the   |
        | model (works with libraries that provide support  |
        | for JSON and XML)                                 |
 类似资料:
  • 将Android Studio升级到4.0版本后,在“gradle-wrapper.properties”中:

  • 在我的rest控制器类中,我有以下方法 这特别说明我正在将application/json对象返回给请求用户。但是,当我执行rest-assured测试时 我收到以下错误 我很困惑,不知道为什么我的标题在rest测试中没有说明任何内容类型。我将请求放入我的web浏览器并选择Headers选项卡,元数据如下所示 响应头 请求头 关于为什么我的ContentType没有被请求的rest-assured

  • 我在编组/解组avro生成的类时遇到了一个奇怪的问题。我得到的错误是抛出一个not enum错误-除了我的类中没有任何枚举。 错误具体如下: com.fasterxml.jackson.databind.JsonMappingException: Not an enum:{"type":"记录","name":"TimeUpdateTopic","namesspace":"org.company.

  • 我用camel定义了一个处理器,它允许我使用计时器生成一个jaxb-javabean,并将pojo写入xml文件。但当我启动应用程序时,我遇到了以下错误: 08:09:00 WARN[or.ap.ca.co.ti.时间消费者](骆驼(骆驼-1)线程#2-定时器://生成发票)错误处理交换。交换[20E715FDB7EFE19-0000000000000000]。由:[java.io.IOEx 我的

  • 要允许您传播关于已生成消息的内容类型的信息,默认情况下,Spring Cloud Stream附加contentType标头到出站消息。对于不直接支持头文件的中间件,Spring Cloud Stream提供了自己的自动将邮件包裹在自己的信封中的机制。对于支持头文件的中间件,Spring Cloud Stream应用程序可以从非Spring Cloud Stream应用程序接收具有给定内容类型的消

  • 我首先有一个多部分文件,我想把它发送到camel管道,并用原始名称保存这个文件。 我的代码: 另一方面,我有: from(“seda:rest_upload”).convertBodyTo(File.class).to(“file://rest_files"); 我也尝试注册转换器: 当我执行我的代码时,我看到下面的stacktrace: 如何解决这个问题?