SPRING/WEBSERVICE

[RESTFUL 학습] SWAGGER 심화-1

JUMP개발자 2020. 8. 31. 00:26
@Configuration
@EnableSwagger2
public class SwaggerConfig {

    private static final Contact DEFAULT_CONTACT
            = new Contact("Lee","http://www.jump.com","bins@naver.com");

    private static final ApiInfo DEFAULT_API_INFO = new ApiInfo("AweSome API Title","rest api study","1.0", "urn:tos",DEFAULT_CONTACT, "Apache 2.0","http://www.apace.org", new ArrayList<>());

    private static final Set<String> DEFAULT_PRODUCTS_AND_CONSUMES =  new HashSet<>(Arrays.asList("application/json","application/xml"));

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                   .apiInfo(DEFAULT_API_INFO)
                   .produces(DEFAULT_PRODUCTS_AND_CONSUMES)
                   .consumes(DEFAULT_PRODUCTS_AND_CONSUMES);
    }

    @Bean
    public LinkDiscoverers discovers() {

        List<LinkDiscoverer> plugins = new ArrayList<>();
        plugins.add(new CollectionJsonLinkDiscoverer());
        return new LinkDiscoverers(SimplePluginRegistry.create(plugins));

    }
}

 

Swagger Config파일에 위와 같이 추가 정보를 설정할 수 있다.

Contact : 계약정보 - import springfox.documentation.service.Contact;

ApiInfo : API 정보 - import springfox.documentation.service.ApiInfo;

Consume / produces 정보

- 서버로 보낼 데이터의 Content-type을 설정해 줍니다. consumes: - application/json

- 클라이언트에게 전송할 데이터의 Content-type을 설정해 줍니다. produces: - application/json

위와 같이 contact, license정보를 JSON 형태로 추가로 보내는 것을 POSTMAN을 찍어볼 수 있다.

 

package com.example.demo.user;

import java.util.Date;

import com.fasterxml.jackson.annotation.JsonFilter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.Past;
import javax.validation.constraints.Size;

@Data
@AllArgsConstructor
// <!-- 아래와 같이도 표현가능 -->
//@JsonIgnoreProperties(value={"password"})
@NoArgsConstructor
// @JsonFilter("UserInfo")
@ApiModel(description = "사용자 상세 정보를 위한 도메인 객체")
public class User {

    private Integer id;
    @Size(min=2, message ="Name은 2글자 이상 입력해 주세요.")
    @ApiModelProperty(notes ="사용자의 이름을 입력해주세요.")
    private String name;
    @Past
    @ApiModelProperty(notes ="사용자의 등록일을 입력해주세요.")
    private Date joinDate;

    //@JsonIgnore

    @ApiModelProperty(notes ="사용자의 패스워드를 입력해주세요.")
    private String password;
    // @JsonIgnore

    @ApiModelProperty(notes ="사용자의 주민번호를 입력해주세요.")
    private String ssn;
}

 

그리고 VO에서 위와 같이 ApiModel 어노테이션을 이용하여 각 필드에 추가 정보를 같이 보낼 수 있다.