스프링 백엔드RESTFULL 적용
스프링 목록
- Spring(1) - 백엔드 초기설정
- Spring(2) -스프링 Client 파일 업로드(1)
- Spring(3) -스프링 Client 파일 업로드(2)
- Spring(4) - 백엔드 RESTFULL 로 바꾸기
- Spring(5) - 게시판 페이징 기능 추가하기
- Spring(6) - 검색 기능 추가
- Spring(7) - 프론트 ContextPath 동적 설정
스프링 부트 목록
- Spring Boot(1) - 스프링 부트 초기설정
- Spring Boot(2) - JPA 사용해 보기
- Spring Boot(3) - JPA 방향설정, 관계설정
- Spring Boot(4) - JPA 심화
- Spring Boot(5) - JPA 일대일 실습
REST란?(링크)
REST(Representational State Transfer)는 월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식이다.
엄격한 의미로 REST는 네트워크 아키텍처 원리의 모음이다. 여기서 ‘네트워크 아키텍처 원리’란 자원을 정의하고 자원에 대한 주소를 지정하는 방법 전반을 일컫는다
기존 코드와 달라진점
- Controller
@RestController
태그로 어노테이션 교체- JSON 형태로 기존에 썻던
@ResponseBody
제거하기
(RESTFULL 쓰는순간 모든 자료교환은 JSON으로 하기떄문)
- 기존 modify, remove , get 다 board url로 합칠수 있게됨
- 이제부터
GET
,POST
,PUT
,DELETE
매핑 사용- url에 담겨있는 정보는
@PathVariable
로 파라미터 앞에 어노테이션 추가
이제부터는@RequestParam(defaultValue)
못 씀
따라서, 자바의Optional<>
사용해야함(null 값 방지)
임폴트 구문(펼치기)
1. 기존 태그에 @Controller 교체
@RestController
// 이 컨트롤러에 속한 url은 모두 board/..
@RequestMapping("board/*")
public class RepBoardController {
}
2. info() 수정 GET[게시물 하나 불러오기]
@GetMapping("/{no}")
//url에 no가 넘어오는 변수인걸 적어줘야함
public Object info(@PathVariable int no) {
try {
RepBoard rb = service.findByNo(no);
Map<String, Object> info = new HashMap<String, Object>();
info.put("boardNo", rb.getBoardNo());
info.put("boardTitle", rb.getBoardTitle());
info.put("boardC", rb.getBoardC());
info.put("boardDt", rb.getBoardDt());
info.put("boardContent", rb.getBoardContent());
info.put("boardViewcount", rb.getBoardViewcount());
File dir = new File(saveDirectory);
List<String> filesNameList = new ArrayList<String>();
for (String fileName : dir.list()) {
String [] splitedName =fileName.split("_");
if(splitedName[0].equals(""+no)) {
filesNameList.add(fileName);
}
}
info.put("files", filesNameList);
return info;
} catch (FindException e) {
Map<String, Object> rm = new HashMap<String, Object>();
rm.put("msg", e.getMessage());
rm.put("status", 0);
e.printStackTrace();
return rm;
}
}
3. modfiy 수정 PUT[게시물 수정]
@PutMapping("/{boardNo}")
public Map<String, Object> modify(@PathVariable int boardNo,
@RequestBody RepBoard rb,
HttpSession session) {
Customer c = new Customer();
c.setId("id1");
try {
rb.setBoardC(c);
rb.setBoardNo(boardNo);
service.modify(rb);
Map<String, Object> rm = new HashMap<String, Object>();
rm.put("msg", "수정 성공");
rm.put("status", 1);
return rm;
} catch (ModifyException e) {
// TODO Auto-generated catch block
Map<String, Object> rm = new HashMap<String, Object>();
rm.put("msg", e.getMessage());
rm.put("status", 0);
e.printStackTrace();
return rm;
}
}
4. romve 수정 DELETE[기존 게시물 삭제]
@DeleteMapping("/{boardNo}")
public Map<String, Object> remove(@PathVariable int boardNo) {
try {
RepBoard rb = new RepBoard();
rb.setBoardNo(boardNo);
service.remove(rb);
Map<String, Object> rm = new HashMap<String, Object>();
rm.put("msg", "삭제 성공");
rm.put("status", 1);
return rm;
} catch (RemoveException e) {
// TODO Auto-generated catch block
Map<String, Object> rm = new HashMap<String, Object>();
rm.put("msg", e.getMessage());
rm.put("status", 0);
e.printStackTrace();
return rm;
}
}
(/board )
url하나로 글 불러오기, 수정, 삭제 다 가능
5. list() 수정 GET[모든 게시물 불러오기]
@GetMapping({"/list/{page}" , "/list"})
public Object list(@PathVariable Optional<Integer> page) {
try {
List<RepBoard> list;
if(page.isPresent()) {
list = service.findAll(page.get());
}else {
list = service.findAll();
}
return list;
} catch (FindException e) {
Map<String, Object> returnMap = new HashMap<>();
returnMap.put("msg", e.getMessage());
returnMap.put("status", 0);
return returnMap;
}
수정 완료 코드
@RestController
@RequestMapping("board/*")
public class RepBoardController {
private String saveDirectory = "f:\\files";
private int s_width=100;
private int s_height=100;
@Autowired
private RepBoardService service;
Logger log = Logger.getLogger(this.getClass());
// servlet-context에 mvc추가후, mvc탭 ->어노테이션 드리븐
@GetMapping({"/list/{page}" , "/list"})
public Object list(@PathVariable Optional<Integer> page) {
try {
List<RepBoard> list;
if(page.isPresent()) {
list = service.findAll(page.get());
}else {
list = service.findAll();
}
return list;
} catch (FindException e) {
Map<String, Object> returnMap = new HashMap<>();
returnMap.put("msg", e.getMessage());
returnMap.put("status", 0);
return returnMap;
}
}
@GetMapping("/{no}")
//url에 no가 넘어오는 변수인걸 적어줘야함
public Object info(@PathVariable int no) {
try {
RepBoard rb = service.findByNo(no);
Map<String, Object> info = new HashMap<String, Object>();
info.put("boardNo", rb.getBoardNo());
info.put("boardTitle", rb.getBoardTitle());
info.put("boardC", rb.getBoardC());
info.put("boardDt", rb.getBoardDt());
info.put("boardContent", rb.getBoardContent());
info.put("boardViewcount", rb.getBoardViewcount());
File dir = new File(saveDirectory);
List<String> filesNameList = new ArrayList<String>();
for (String fileName : dir.list()) {
String [] splitedName =fileName.split("_");
if(splitedName[0].equals(""+no)) {
filesNameList.add(fileName);
}
}
info.put("files", filesNameList);
return info;
} catch (FindException e) {
Map<String, Object> rm = new HashMap<String, Object>();
rm.put("msg", e.getMessage());
rm.put("status", 0);
e.printStackTrace();
return rm;
}
}
@PutMapping("/{boardNo}")
public Map<String, Object> modify(@PathVariable int boardNo,
@RequestBody RepBoard rb,
HttpSession session) {
Customer c = new Customer();
c.setId("id1");
try {
rb.setBoardC(c);
rb.setBoardNo(boardNo);
service.modify(rb);
Map<String, Object> rm = new HashMap<String, Object>();
rm.put("msg", "수정 성공");
rm.put("status", 1);
return rm;
} catch (ModifyException e) {
// TODO Auto-generated catch block
Map<String, Object> rm = new HashMap<String, Object>();
rm.put("msg", e.getMessage());
rm.put("status", 0);
e.printStackTrace();
return rm;
}
}
@DeleteMapping("/{boardNo}")
public Map<String, Object> remove(@PathVariable int boardNo) {
try {
RepBoard rb = new RepBoard();
rb.setBoardNo(boardNo);
service.remove(rb);
Map<String, Object> rm = new HashMap<String, Object>();
rm.put("msg", "삭제 성공");
rm.put("status", 1);
return rm;
} catch (RemoveException e) {
// TODO Auto-generated catch block
Map<String, Object> rm = new HashMap<String, Object>();
rm.put("msg", e.getMessage());
rm.put("status", 0);
e.printStackTrace();
return rm;
}
}
@PostMapping("board/reply")
public Map<String, Object> reply(@RequestBody RepBoard inRepboard) {
//TODO 프론트에서 boardC.id 로 값주면 왜 자동매핑 안되는지?..
try {
if( inRepboard.getParentNo() == 0) {
throw new AddException("부모번호가 없습니다.");
}
service.add(inRepboard);
Map<String, Object> rm = new HashMap<String, Object>();
rm.put("msg", "추가 성공");
rm.put("status", 1);
return rm;
} catch (AddException e) {
// TODO Auto-generated catch block
Map<String, Object> rm = new HashMap<String, Object>();
rm.put("msg", e.getMessage());
rm.put("status", 0);
return rm;
}
}
스프링 목록
- Spring(1) - 백엔드 초기설정
- Spring(2) -스프링 Client 파일 업로드(1)
- Spring(3) -스프링 Client 파일 업로드(2)
- Spring(4) - 백엔드 RESTFULL 로 바꾸기
- Spring(5) - 게시판 페이징 기능 추가하기
- Spring(6) - 검색 기능 추가
- Spring(7) - 프론트 ContextPath 동적 설정
스프링 부트 목록