일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 객체형변환
- hamobee
- garbagecollection
- object
- Polymorphism
- 추상클래스
- string
- Hashtable
- value
- 콘크리트클래스
- abstractclass
- eclipse
- concreteclass
- override
- Eureka
- Vector
- methodArea
- ALTER
- start()
- MSA
- 생성자
- run()
- hashCode
- reference
- arguments
- overload
- super
- fuction
- constantnumber
- class
- Today
- Total
뇌운동일지
[ 오늘의 오리 ] 나는 원래 rest api 를 공부하려고 했다. 본문
정신을 차려보니 아래의 예제를 따라해보려고 하고 있었다.
Spring boot 기반 REST API 제작 (2)
PREV: Spring boot 기반 REST API 제작 (1)
medium.com
Controller 부분에서 crudrepository의 method들을 사용하는데, 예제대로 하면 안되는 부분이 있어서
아래의 글을 참고하여 수정했다.
https://dbbymoon.tistory.com/3
Optional 클래스 사용하기
스프링 데이터 JPA를 사용하며 CrudRepository의 findById 메서드 리턴 타입인 Optional 클래스에 처음 접하게 되었습니다. Optional은 Java 8에 추가된 새로운 API로 이전에 하던 '고통스러운 null 처리'를 '잘'.
dbbymoon.tistory.com
(2) 에서 수정해야 할 controller 내용
package com.newexample.duckduck.controller;
import java.util.Optional;
import com.newexample.duckduck.entity.User;
import com.newexample.duckduck.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "/users")
public class UserController {
private UserRepository userRepository;
@Autowired
public UserController(UserRepository userRepository) {
this.userRepository = userRepository;
}
// CREATE
// 사용자 name을 입력받아 새로운 User를 생성하고 그 결과를 반환
@PostMapping
public User put(@RequestParam String name) {
return userRepository.save(new User(name));
}
// READ
// 모든 사용자 리스트를 반환
@GetMapping
public Iterable<User> list() {
return userRepository.findAll();
}
// READ
// 해당 ID의 사용자를 반환
@GetMapping(value = "/{id}")
public Optional<User> findOne(@PathVariable Long id) {
return userRepository.findById(id);
}
// UPDATE
// 해당 ID의 사용자 이름을 갱신한 뒤 그 결과를 반환
@PutMapping(value = "/{id}")
public User update(@PathVariable Long id, @RequestParam String name) throws Exception {
// User user = userRepository.findById(id);
User user;
Optional<User> optional = userRepository.findById(id);
if(optional.isPresent()){
user = optional.get();
}
else{
throw new Exception();
}
user.setName(name);
return userRepository.save(user);
}
// DELETE
// 해당 ID의 사용자를 삭제
@DeleteMapping
public void delete(@RequestParam Long id) {
userRepository.deleteById(id);
}
}
이것이 수정한 코드
다음 단계 따라하려면 다시 수정해야 되서 임시로 중간코드 옮겨둠.
그리고 이것은 쓸모가 있었다.
(3) 에서 실행해보는데, 그냥 실행하면 안됨
이렇다고 한다.
여기서 문제는 db가 h2 였다는 것이다.
그래서 나는 h2 db에 대해 여행을 떠나게 됨.
jpa 사용할 때 h2 DB 관련되어 있어서 이제와서 DB 바꾸는것이 더 큰 고통
이렇게 h2 DB를 설치하게 됨.
h2 설치는 글을 따로 써야겠다.
[오리너구리의 오리발질] - [ 비오는날 떠내려 온 오리 ] h2 database 설치
[ 비오는날 떠내려 온 오리 ] h2 database 설치
http://www.h2database.com/html/download.html Downloads Downloads Version 1.4.200 (2019-10-14) Windows Installer (SHA1 checksum: 12710a463318cf23c0e0e3f7d58a0f232bd39cfe) Platform-Independent Zip (SH..
earlgreybutter.tistory.com
이제 application.properties 를 설정해야겠지....
별 오류가 다생기는데 별안간에 db랑 연결이 안됐다는 것이다.
이런 식
나는 이 오류에 대해 찾아보았고,
https://dololak.tistory.com/473
[JAVA] H2 DB에 JDBC 연결시 예외 unexpected status 16777216 또는 Could not load requested class 해결 방법
하이버네이트를 H2 DB에 연동하여 사용하려고 프로젝트를 세팅하고 쿼리를 수행하려고 하니 다음과 같은 첫번째 예외가 발생했습니다. 첫번째 예외 Exception in thread "main" javax.persistence.PersistenceExce
dololak.tistory.com
springboot 에 외부 jar 파일을 추가하는 방법을 찾아보게 되었다.
아 정말 욕이 절로 나오네
이렇게까지 할 일이냐
하지만 원래 프로그래밍의 기본은 마음의 평정이다.
난 한번에 안될걸 알고 있었어.
얌전히 외부 jar 추가를 해보자.
여기까지 왔으면 밀어붙여야 된다.
drag and drop 하시오
이것도 build.gradle에 추가함
아래의 글을 참고했다.
https://memories95.tistory.com/127
[Spring Boot] 외부 jar 사용하기 (FileUpload, Json)
만약 Webjar에서 제공되지 않는 외부 jar파일을 사용하기 위해서는 어떻게 해야할까? : 답은 단순하게 직접 추가해서 사용하는 수밖에 없다. Gradle에서는 build.gradle 파일에 외부 중앙 저장소와 라이�
memories95.tistory.com
이거 추가하고 다시 run 하니까
일단은 여기까지 옴.
그런데 이거 써두길 참 잘했다.
-- springboot gradle 외부 jar 사용 -- 에 대해 생각하다보니 내가 원래 뭐하고 있었는지 까먹음
이제 뭐해야하지??
실행되는지 확인해야 됨.
이렇게 단순하게 하면 안돼.
405 error get 방식으로 접근할 수 없어.
그냥 시키는대로 해봐야겠다고 생각함.
내가 따라하고 있는 맨 위의 포스팅에서 curl 명령어를 썼어.
그런데 난 윈도우를 쓰고 있다.
나 리눅스 명령어 안깔려있어. 이걸봐.
그래서 이제 리눅스 명령어 실행가능하게 하러 갈 것이다.
gow-master 가 깔려있길래 환경 변수 만 설정해줌.
curl 명령어도 쓸 수 있어.
자 이제 다시 실행하러 가보자.
명령어 너무 길어서 일단 여기 써둠
curl -X "POST" "http://localhost:8080/users" \ -H 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode "username=alice" \ --data-urlencode "password=wonderland"
그냥 했더니 curl 인식 못함.
vscode 껐다 켜보겠다.
참고로 terminal은 당연히 다시 실행했었음.
다시 켜지는거 너무 느리다.
Aㅏ..................................
그런데 왠지 curl 명령어로 실행해봐도 안될 것이라는 예감이 든다.
어쩌다 여기까지 왔을까.
여기까지 왔으면 밀어붙여야됨.
curl 명령어는 인식했다.
그러나 뭘 could not 한다는 뜻인지 알아보러 가자.
"message": "Missing request header 'authorization' for method parameter of type String",
https://blog.dalso.org/linux/4609
curl: (6) Could not resolve host: 해결하기. - 달소씨의 하루
curl은 리눅스에서 http/https등 여러가지 프로토콜등을 통해 업로드 및 다운로드 그리고 Put / Post등 CLI를 통해서 통신할수있게 도와주는 tool이다 curl을 통해서 헤더 정보만 뽑아낼 수 있고 API 연동��
blog.dalso.org
etc 위치는 또 어디로 둬야됨....
일단 해본다.
http://hanury.net/wp/archives/1136
Windows 에서 /etc/hosts 파일 위치. « Hanury.NET
/Windows/system32/drivers/etc Unix(MacOSX 포함해서)에서는 /etc/hosts 파일을 내 입맛에 맞게 수정해서 쓰고 있는데, Windows에도 있는 건 알고 있었지만, 위치가 지저분해서 외우고 있지는 않아 오늘 찾아 봄.
hanury.net
이게 이렇게까지 해야할 일인가.
나는 확장자면 공개되어있는데 일단 참고
파일 확장자 변경 방법 : 폴더옵션 변환 하기
기나긴 추석 연휴 다들 즐겁게 보내고 계시죠?주말까지 쉴 생각을 하니 기쁜 마음에 새 미드를 하나 시작했...
blog.naver.com
여기까지 만들어줌......
근데 id 1번이 들어갔다는 것일수도 있어서 data바꿔서 해봐야지
curl "http://localhost:8080/users/me" \ -H 'Content-Type: application/x-www-form-urlencoded' \ -H Authorization: 'Basic YWxpY2U6d29uZGVybGFuZA=='
이거 그냥 실행해버리면 400 error 뜸...
사실 나는 위의 포스팅 연작 (2)까지의 controller를 가지고 있었다.
curl 명령어로 넣어둔 data를 authorization 안해둔 주소로 조회가능했음
별안간에 들어는 갔다는 의미
get 방식은 잘 실행되는구나
아까 resolv.conf 는 그냥 삭제함.
그냥 실행안해보고 계속 가보자.
이 예제가 이렇게 어려워진 것은 authorization 을 하려고 했기 때문
나는 지금 그렇다면 authorization 을 제외하고 해보자고 생각하는 중이다.
아 망한것같다.
위의 생각도 쉽지 않은 생각임.
curl -X "PUT" "http://localhost:8080/users/me" \ -H 'Content-Type: application/x-www-form-urlencoded' \ -H Authorization: 'Basic YWxpY2U6d29uZGVybGFuZA==' --data-urlencode "password=neverland"
post 는 가능하다는 것을 알게됨.
Missing request header 'authorization' for
오류중에 이러한 것들이 나온다.
authorization 그냥 빼보자.
아 걍 때려칠까 고민중
https://github.com/earlgreybutter/duckoriginal
earlgreybutter/duckoriginal
Contribute to earlgreybutter/duckoriginal development by creating an account on GitHub.
github.com
여기까지는 했다.
이번에는 이거해볼까 고민중
http://ojc.asia/bbs/board.php?bo_table=LecJpa&wr_id=317
스프링부트(Spring Boot) REST CRUD 이론 및 실습(JPA, MariaDB)
스프링부트(Spring Boot) REST CRUD 이론 및실습(JPA, MariaDB)아래 이미지 깨지는 부분은 PDF 파일 참조 부탁드립니다.감사합니다~6-20-4. Spring Boot REST CRUD 실습(JPA, MariaDB) GitHub : https://github.com/leejongcheol/sprin
ojc.asia
'오리너구리의 오리발질' 카테고리의 다른 글
[ 비가 그친 오리 ] rest api 실행결과 (0) | 2020.07.24 |
---|---|
[ 오늘의 오리발질 ] 오늘도 rest api를 해보려고 했다. (0) | 2020.07.24 |
[ 오리는 둥둥 ] postman 실행결과 - get (0) | 2020.07.23 |
[ 오리는 둥둥 ]springboot+gradle+vscode (0) | 2020.07.23 |
협회홈페이지만들기 - 자잘한 수정사항 (0) | 2020.04.10 |