목록restful (19)
helloworld
지금까지 User를 가지고 요리조리 만들어보았다. 이젠 간단한 메모장을 만들어보자 .. 간단히 Post 클래스에 id, description, user를 만들었다. 우선 만들기 전에 생각해야 할 것이 있다. 한명이 게시글 여러개를 만들수 있고, 한개만 만들 수도 있고, 만들지 않을 수도 있다. 즉 1: 0 or N 이다. 또한 게시글은 있지만 글쓴이는 없을 수가 없다. 이런 면에서는 부모자식 관계라고 해도 될것같다. 한줄로 표현하면 유저 : 게시글 - > 1 : 0~N - > Main : Sub -> Parents : Child 라고 생각하면 될 것 같다. @Data @Entity @AllArgsConstructor @NoArgsConstructor public class Post { @Id @Gener..
jpa가 확실히 쿼리문을 안적어도 되서 굉장히 작업량을 줄여주는 것 같다. 원래같으면 insert into table("","","","") values({id},{pwd},{~~~}) 이런식으로 해야하는데 이런 과정이 없어서 시간도 작업량도 엄청 줄여주는 것같다.. 뭐 암튼 저번에 포스팅햇던 상태코드제어하기를 같이 사용하여 @PostMapping("/users") public ResponseEntity createUser(@Valid @RequestBody User user) { User savedUser = userRepository.save(user); URI location = ServletUriComponentsBuilder.fromCurrentRequest() .path("/{id}") .bu..
delete는 정말 쉽다... delete는 리턴 받을 것이 없기 때문에 물론 받게하려면 받을 수 있겠지만.. 우선 @DeleteMapping으로 시작한다. @DeleteMapping("/users/{id}") public void deleteUser(@PathVariable int id) { userRepository.deleteById(id); } 가변변수를 사용해야하기 때문에 pathvariable 을 사용해주고 jpa 메서드인 deleteById 하면 끝...
전 글에서는 모든 유저의 정보를 가져왔다. 이번엔 한 명의 유저 정보를 가져와보자.. jpa를 사용하기때문에 비슷비슷하다 .. 우선 restAPI를 하는 과정이기 때문에 @GetMapping("/users/{id}") 요청은 똑같다. 가변변수를 사용하기 때문에 파라미터를 받을 때에 @Pathvariable 어노테이션을 붙여준다. public EntityModel retrieveUser(@PathVariable int id) { Optional user = userRepository.findById(id); Optional이 붙은 이유와 EntityModel을 붙인 이유를 간단히 말하자면 저번에 포스팅했던 HATEOAS 기능을 사용하기 위해 EntityModel이 리턴값으로 붙었고 Optional은 안쓰면..
별로 어려운건 없는것 같다.. repository를 위한 인터페이스를 만들어 준 후에 JpaRepository를 상속받는다 그 후 repository 클래스 위에 @Repository를 만들어 준다 @Repository public interface 리파지토리 extends JpaRepository { } 띠용 아 참 JpaRepository에 들어가는 매개변수는 도메인클래스, 도메인의 기본키를 넣었다(generatedValue) select문을 사용할 때는 컨트롤러에서 리파지토리를 의존성 주입을 해준 후에 리파지토리 . 하면 사용할 수 있는 메서드이 나온다 . 뭐가 있는지 궁금하다면 JpaRepository에 마우스를 대고 컨트롤+좌클릭 혹은 컨트롤+b를 누르면 메서드들을 확인 할 수 있다. 암튼 나는..
나중에 oracle이나 mysql이랑 비슷할거같기도하당. org.springframework.boot spring-boot-starter-data-jpa com.h2database h2 2.1.214 runtime 우선 관련 기능을 dependency에 추가한다 그 후 yml 파일에서 datasource: url: jdbc:데이터베이스url;NON_KEYWORDS=USER username: sa h2: console: enabled: true jpa: show-sql: true defer-datasource-initialization: true 넣어준다. show sql은 실행시키는 database 쿼리문을 보기 위한 설정이다. defer-datasource-initializaion은 h2 databas..
이름부터 어렵다.. 일단 HATEOAS는 하나의 리소스에서 그 리소스와 관련된 링크를 추가하는 것이다. 예를 들면 한명의 유저의 정보를 가져오는 기능이 있다고 생각해보자. 유저의 정보를 보내면서 전체유저의 정보를 확인하는 소스의 링크까지 같이 보내는 것이다. 그럼 사용자 입장에서 굉장히 편리할 것이다. 다시 전체유저의 목록을 보러가는 귀찮음을 서버에서 한번에 보내주니 2번클릭할거 1번 클릭할것이다 .. 라고 나는 이해했다. 우선 pom.xml에 org.springframework.boot spring-boot-starter-hateoas hateoas 디펜던시를 추가한다. hateoas를 사용하고자 하는 기능에서 EntityModel과 WebMvcBuilder를 생성한다 EntityModel model ..
이번엔 내 코드에 대해 버전 관리를 해보자 .. 생각보다 어렵지는 않더군 .. 우선 기존 도메인클래스인 User클래스를 복사해서 버전2라는 의미의 UserV2라는 도메인을 생성했다. 그 후 기존 도메인을 상속 받은 뒤 String grade를 추가해주었다. *디폴트생성자가 없으면 에러가 날지도... 컨트롤러에서 @GetMapping("/users/{id}") public MappingJacksonValue retrieveUserV1(@PathVariable int id) { User user = service.findOne(id); if (user == null) { throw new UserNotFoundException(String.format("ID[%s] not found", id)); } Sim..
전 글에서는 JsonIgnore로 데이터를 안보이게끔 하였다. 이번엔 좀 더 프로그래밍적으로 멋잇게(?) 해본다.. 우선 JsonIgnore 어노테이션을 전부 주석처리하고 @JsonFilter를 추가한다 @Data @AllArgsConstructor //@JsonIgnoreProperties(value={"password"}) @JsonFilter("UserInfo") public class User { private Integer id; @Size(min = 2, message = "Name은 2글자 이상 입력해주세요") private String name; @Past private Date joinDate; // @JsonIgnore private String password; // @JsonIgno..
데이터를 사용하다보면 노출 시키고 싶지 않은 데이터들도 있을 것이다. 예컨데 비밀번호나 주민등록번호같은.. 이번엔 데이터 필터링을 해본다. 전글에서 xml로 데이터를 변환시키기 위해 디펜던시를 하나 넣었다. jackson 어쩌고저쩌고 .. 도메인클래스에서 public class User { private Integer id; @Size(min = 2, message = "Name은 2글자 이상 입력해주세요") private String name; @Past private Date joinDate; private String password; private String ssn;//주민등록번호 } 비밀번호와 주민번호를 추가해주었다. 예제코드에 있던 list에도 비밀번호와 주민번호를 추가해둔 상태다. 이 상태..