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 어노테이션을 이용하여 각 필드에 추가 정보를 같이 보낼 수 있다.