RESTful

    Spring security 기초

    Spring security 기초

    implementation 'org.springframework.boot:spring-boot-starter-security' 해당 라이브러리를 추가한다. 하고 실행을하면. 콘솔에 다음과 같이 security password가 뜬다. 이제, 아무리 api를 요청해도 401 에러가 뜬다. 이를 해결하기 위해서는 header에 Authorization -> type -> basic Auth username에는 user password에는 방금 위에 패스워들 넣으면 값들이 정상적으로 반환이된다.!! 또한 내가 username과 password를 설정할 수도있다. application.properties에서 다음과같이 설정하자. spring.security.user.name=username spring.secu..

    Swagger documentation 커스터마이징하기

    Swagger documentation 커스터마이징하기

    import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.Contact; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; import ja..

    Swagger(rest api documentation)

    Swagger(rest api documentation)

    Swagger는 사용자나 개발자를 위한 documentation을 지원하는 오프소스 프레임워크이다. implementation 'io.springfox:springfox-boot-starter:3.0.0' config 패키지생성후 SwaggerConfig Configuration파일 생성 import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; @Configuration @EnableSwagger2 public class SwaggerConfi..

    HATEOAS

    HATEOAS

    HATEOAAS( Hypermedia As the Engine of Application State) ->> 현재 리소스와 연관된(호출 가능한 ) (hyper text)자원 상태 정보를 제공 implementation 'org.springframework.boot:spring-boot-starter-hateoas' build.gradle에 해당 의존성 추가 // 다음코드를 static으로 선언한다. 왜 난.. static으로 선언 안하면 사용이 안되는지 모르겠다.. import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; import static org.springframework.hateoas.server.mvc.Web..

    Request  Parameter 와 Header를 이용한 API 관리

    Request Parameter 와 Header를 이용한 API 관리

    저번 포스팅에서는 uri 자체에 v1,v2등 버전을 직접 넣음으로써 version을 관리했다. 이번에는 Request Parameter를 사용해서 버전을 관리해보자. -Parameter- // request param을 사용하기 때문에 @Getmapping value(url)에 마지막에 '/' 를추가해줘야한다. @GetMapping(value = "/users/{id}/",params = "version=1") public MappingJacksonValue retrieveUserV1(@PathVariable int id) { } @GetMapping(value = "/users/{id}/",params = "version=2") public MappingJacksonValue retrieveUserV2..

    Rest API version 관리(URI)

    API를 서비스를 하다보면, 시간이 지나면서 각 버전들이 나온다. 그 버전들을 관리하는 방법을 알아보자. 새로운 User 객체 생성 @Data @AllArgsConstructor @NoArgsConstructor @JsonFilter("UserInfoV2") // User class에 @NoArgsConstructor 추가 public class UserV2 extends User{ private String grade; } 기존 user를 상속받고, grade 필드를 추가한다. @GetMapping("/v2/users/{id}") public MappingJacksonValue retrieveUserV2(@PathVariable int id) { User user = service.findOne(id)..

    @JsonFilter

    @JsonFilter

    biuild.gradle 에 jackson 라이브러리를 추가해줘야한다. implementation 'com.fasterxml.jackson.core:jackson-databind' import com.fasterxml.jackson.annotation.JsonFilter; import lombok.AllArgsConstructor; import lombok.Data; import javax.validation.constraints.Size; import java.util.Date; @Data @AllArgsConstructor @JsonFilter("UserInfo") public class User { private Integer id; @Size(min=2) private String name; pr..

    @JsonIgnore (jackson)

    @JsonIgnore (jackson)

    서버로부터 응답하는 Http response 데이터를 제어하기위해서는 jackson 라이브러리를 추가해줘야한다. implementation 'com.fasterxml.jackson.core:jackson-databind' build.gradle에 다음 코드를 추가하다음, 빌드시키자. 만약 user 데이터를 웹에 보낼때, 주민번호나, 전화번호를 헤더에 그대로 노출 시키는것을 보안상 위험하다. 그래서 이것을 제어할 수있게 해주는것이 jackson이다. @Data @AllArgsConstructor public class User { private Integer id; @Size(min=2) private String name; private Date joinDate; @JsonIgnore private St..

    Internationalization  다국어처리

    Internationalization 다국어처리

    Internationaliztion @Configuration 등록 usuage @SpringBootApplication public class WebserviceApplication { public static void main(String[] args) { SpringApplication.run(WebserviceApplication.class, args); } @Bean public LocaleResolver localeResolver() { SessionLocaleResolver localeResolver = new SessionLocaleResolver(); localeResolver.setDefaultLocale(Locale.KOREA); return localeResolver; } } spr..

    Validation

    Validation

    Validation은 유효성이라는 뜻으로, Entity 객체에 @valid 를 부여함으로써, 예외를 발생 시킬수있다. import lombok.AllArgsConstructor; import lombok.Data; import javax.validation.constraints.Past; import javax.validation.constraints.Size; import java.util.Date; @Data @AllArgsConstructor public class User { private Integer id; @Size(min=2) private String name; private Date joinDate; } 위에 @Size(min=2) 의 의미는 String name의 크기가 최소2가 넘어..

    Client 요청 예외처리하기(Status code)

    Client 요청 예외처리하기(Status code)

    다음은 간단한 유저를 저장하는 코드이다. @RestController public class UserController { private UserDaoService service; public UserController(UserDaoService service) { this.service = service; } @GetMapping("/users/{id}") public User retrieveUser(@PathVariable int id) { return service.findOne(id); } } 매우 간단한다. 아이디를 받아서, 해당 아이디가 있으면 그정보를 반환한다. 하지만, 만약 아이디에 해당하는값이 없다면? public User save(User user) { if (user.getId() =..