加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES没有反映在s

发布时间:2020-12-15 02:12:18 所属栏目:Java 来源:网络整理
导读:我正在使用Jersey,Jax-rs和swagger( Spring for injection).我的对象有一些成员和嵌入对象,其名称由多个单词组成,在代码中我使用camelCase. 我定义了一个解析器,因此按照标准惯例将它们作为下划线发出.问题是,招摇是显然没有拿起这个解析器,所以对象仍然在sw
我正在使用Jersey,Jax-rs和swagger( Spring for injection).我的对象有一些成员和嵌入对象,其名称由多个单词组成,在代码中我使用camelCase.
我定义了一个解析器,因此按照标准惯例将它们作为下划线发出.问题是,招摇是显然没有拿起这个解析器,所以对象仍然在swagger json中显示为camelCase.

以下是我具体配置的一些细节:

我的pom.xml的片段:

<properties>
        <springframework.version>4.2.3.RELEASE</springframework.version>
        <glassfish.jersey.version>2.22.1</glassfish.jersey.version>
    </properties>
<dependencies>

……

<!-- Jersey -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
            <version>${glassfish.jersey.version}</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-server</artifactId>
            <version>${glassfish.jersey.version}</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-client</artifactId>
            <version>${glassfish.jersey.version}</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-json-jackson</artifactId>
            <version>${glassfish.jersey.version}</version>
        </dependency>

<!-- swagger documentation -->
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-jersey2-jaxrs</artifactId>
            <version>1.5.0</version>
        </dependency>

…..

</dependencies>

我只使用注释,所以我的web.xml是空的,我有一个AppInitializer类. Swagger servlet在类中初始化

public class AppInitializer implements WebApplicationInitializer {

    public void onStartup(ServletContext container) throws ServletException {

        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(MongoDbConfig.class);
        ctx.register(CORSResponseFilter.class);
        ctx.setServletContext(container);

        container.addListener(new ContextLoaderListener(ctx));
        container.addListener(new RequestContextListener());

        ServletRegistration.Dynamic servlet = container.addServlet("jersey-servlet",new org.glassfish.jersey.servlet.ServletContainer());
        servlet.setInitParameter("jersey.config.server.provider.packages","io.swagger.jaxrs.listing,com.my.server.config,com.my.server.resource");
        servlet.setLoadOnStartup(1);
        servlet.addMapping("/api/*");

        ServletRegistration.Dynamic swagger = container.addServlet("SwaggerServlet",new io.swagger.jersey.config.JerseyJaxrsConfig());
        swagger.setInitParameter("api.version","1.0.0");
        swagger.setInitParameter("swagger.api.basepath",container.getContextPath()+"/api");
        swagger.setLoadOnStartup(2);
    }

}

这是我的主要模型:

import java.io.Serializable;

import javax.validation.constraints.NotNull;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;

import io.swagger.annotations.ApiModel;


/**
 * @author Tamar Rosen
 *
 */


@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_EMPTY)
@ApiModel
public class Property implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;    

    private String id;

    @NotNull
    private String name;

    @NotNull
    private String description;

    private PropertyDetails propertyDetails;

    private int monthlyTax;

    private String schemaUrl;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public PropertyDetails getPropertyDetails() {
        return propertyDetails;
    }

    public void setPropertyDetails(PropertyDetails propertyDetails) {
        this.propertyDetails = propertyDetails;
    }

    public int getMonthlyTax() {
        return monthlyTax;
    }

    public void setMonthlyTax(int monthlyTax) {
        this.monthlyTax = monthlyTax;
    }

    public String getSchemaUrl() {
        return schemaUrl;
    }

    public void setSchemaUrl(String schemaUrl) {
        this.schemaUrl = schemaUrl;
    }

}

在ContextResolver类中设置CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES.这样可以正常工作,除非它没有反映在由swagger生成的doc中.

以下是ContextResolver实现:

import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;

@Provider
public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> {

    private final ObjectMapper mapper;

    public ObjectMapperContextResolver() {
        mapper = new ObjectMapper();
        mapper.setPropertyNamingStrategy(
            PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
        );
    }

    public ObjectMapper getContext(Class<?> type) {
        return mapper;
    }
}

我怀疑问题是swagger servlet没有看到Context解析器,但我不知道如何解决这个问题

解决方法

好的谢谢.你是对的,在这种情况下,摇摆不定的内省探测器不能遵循杰克逊的映射.您可以在每个字段上添加@ApiModelProperty(name =“property_details”)注释,以通过swagger introspector更改解释名称.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读