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

springfox(swagger2)不能与GsonHttpMessageConverterConfig一起工作

葛霄
2023-03-14

我试图构建的是一个spring-boot(V1.2.3)应用程序,并使用SpringFox(swagger2)V2.0.0公开我的Rest API

我的大摇大摆的Spring配置

@EnableSwagger2
@Configuration
public class SwaggerConfig {

    @Bean
    public Docket myApi() {
        return new Docket(DocumentationType.SWAGGER_2)
            .genericModelSubstitutes(DeferredResult.class)
            .useDefaultResponseMessages(false)
            .forCodeGeneration(false)
            .pathMapping("/my-prj");
    }

}
@Configuration
public class GsonHttpMessageConverterConfig {

    @Bean
    public GsonHttpMessageConverter gsonHttpMessageConverter(Gson gson) {
        GsonHttpMessageConverter converter = new GsonHttpMessageConverter();
        converter.setGson(gson);
        return converter;
    }
}
{
"value": "{\"swagger\":\"2.0\",\"info\":{\"description\":\"Api Documentation\",\"version\":\"1.0\",\"title\":\"Api Documentation\",\"termsOfService\":\"urn:tos\",\"contact\":{\"name\":\"Contact Email\"},\"license\":{\"name\":\"Apache 2.0\",\"url\":\"http:
...

以下是如果不使用GSONHttpMessageConverter:

{
"swagger": "2.0",
"info": {
"description": "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a 
...

有没有一个解决方案来创建一个正确的、没有价值和逃避的大摇大摆的JSON?

共有1个答案

叶裕
2023-03-14

我自己解决了这个问题:

问题在于序列化此类:

package springfox.documentation.spring.web.json;

import com.fasterxml.jackson.annotation.JsonRawValue;
import com.fasterxml.jackson.annotation.JsonValue;

public class Json {
  private final String value;

  public Json(String value) {
    this.value = value;
  }

  @JsonValue
  @JsonRawValue
  public String value() {
    return value;
  }
}

为了正确序列化它,我实现了一个SpringfoxJsonToGsonAdapter,并将其添加到我的gson配置中:

public class SpringfoxJsonToGsonAdapter implements JsonSerializer<Json> {

    @Override
    public JsonElement serialize(Json json, Type type, JsonSerializationContext context) {
        final JsonParser parser = new JsonParser();
        return parser.parse(json.value());
    }
} 

gson配置:

@Configuration
public class GsonHttpMessageConverterConfig {

    @Bean
    public GsonHttpMessageConverter gsonHttpMessageConverter() {
        GsonHttpMessageConverter converter = new GsonHttpMessageConverter();
        converter.setGson(gson());
        return converter;
    }

    private Gson gson() {
        final GsonBuilder builder = new GsonBuilder();
        builder.registerTypeAdapter(Json.class, new SpringfoxJsonToGsonAdapter());
        return builder.create();
    }
}
 类似资料:
  • pom.xml版本信息: SpringFox-Swagger2:2.5.0 昂首阔步-核心:1.5.10 springfox-swagger-ui:2.6.1 Springboot:1.5.3 我有一个项目与swagger2和Springboot。 没有@Aspect的项目代码工作得很好。 正确的结果: 但是当我添加以下代码时,swagger-ui没有显示test-api-impl。 swagge

  • 根据它的Javadoc,将生成,其中的第一个值是subscribe和第一个next信号之间的经过时间。 以下测试不起作用 它将抛出异常: 我原以为经过的时间至少是1000ms,但结果只有11ms。

  • 我如何访问生成的swagger-ui.html?或者index.html我似乎在我的项目中找不到这个文件。啊啊!

  • Selenium版本:2.41.0(作为Nuget包安装)OS:Windows7浏览器:Firefox浏览器版本:32

  • 为了我的研究,我在firefox中做了一些源代码修改并自己构建。为了自动化测试,我选择使用Selenium,但不幸的是,我新构建的Firefox似乎不支持Selenium。 我做了以下工作: Firefox确实会打开并且响应迅速(我可以在搜索栏中输入一个网站)。但过了一段时间,python脚本崩溃,出现以下错误消息: 我在谷歌搜索了那个错误消息,并且大多数解决方案都建议我应该更新Selenium,

  • 我正在使用springfox swagger2,它工作正常。 这只是一个基本的设置/配置,因为我对Swagger真的很陌生。 更新 如果在类中设置这个,我就可以访问。 但是如果我把它更改为,它就不会了,而且我会得到我设置的401错误: 依赖性(pom.xml): 安全配置类 MyAuthenticationEntryPoint 谢了!