美文网首页
@ApiModelProperty的name属性无效解决方案

@ApiModelProperty的name属性无效解决方案

作者: 码农梦醒 | 来源:发表于2020-01-15 13:46 被阅读0次

@ApiModelProperty的name属性作用是修改参数的属性名,但实际使用的时候,发现是无效的,此时要怎么办?

解决方案:

  • 如果你springboot项目json转换使用的是jackson, 那么只需要使用@JsonProperty修改成你需要的属性名
  • 如果你springboot项目json转换使用的是fastjson,那么首先需要使用@JSONField修改成你需要的属性名, 然后对fastjson进行配置
@Configuration
@EnableSwagger2
public class Swagger2 {

    @Autowired
    private ApplicationContext applicationContext;


    @PostConstruct
    public void setObjectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        SimpleModule module = new SimpleModule();
        objectMapper.registerModule(module);

        objectMapper.setAnnotationIntrospector(new JacksonAnnotationIntrospector() {

            @Override
            public boolean isAnnotationBundle(Annotation ann) {
                if (ann.annotationType() == JSONField.class) {
                    return true;
                }
                return super.isAnnotationBundle(ann);
            }

            @Override
            public PropertyName findNameForSerialization(Annotated a) {
                PropertyName nameForSerialization = super.findNameForSerialization(a);
                if (nameForSerialization == null || nameForSerialization == PropertyName.USE_DEFAULT) {
                    JSONField jsonField = _findAnnotation(a, JSONField.class);
                    if (jsonField != null) {
                        return PropertyName.construct(jsonField.name());
                    }
                }
                return nameForSerialization;
            }

            @Override
            public PropertyName findNameForDeserialization(Annotated a) {
                PropertyName nameForDeserialization = super.findNameForDeserialization(a);
                if (nameForDeserialization == null || nameForDeserialization == PropertyName.USE_DEFAULT) {
                    JSONField jsonField = _findAnnotation(a, JSONField.class);
                    if (jsonField != null) {
                        return PropertyName.construct(jsonField.name());
                    }
                }
                return nameForDeserialization;
            }
        });

        ObjectMapperConfigured objectMapperConfigured = new ObjectMapperConfigured(applicationContext, objectMapper);
        applicationContext.publishEvent(objectMapperConfigured);
    }
}

参考

Why does @ApiModelProperty “name” attribute has no effect?

@ApiModelProperty "name" attribute has no effect

Swagger 属性名 FastJson支持

相关文章

网友评论

      本文标题:@ApiModelProperty的name属性无效解决方案

      本文链接:https://www.haomeiwen.com/subject/wudtzctx.html