Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- 스프링부트 블로그
- JS기초
- jpa 게시판
- springboot 게시판
- 스프링부트 미니프로젝트
- springboot 사이드프로젝트
- 스프링부트 회원가입
- 파이썬 기초
- springboot 게시판만들기
- 유니티Cube
- 타입스크립트 기본문법
- 스프링 게시판 만들기
- 타입스크립트 기초
- 스프링부트 블로그만들기
- 유니티
- springboot 게시판 프로젝트
- python 괄호 회전하기
- 스프링부트 update
- 스프링부트 게시판만들기
- 파이썬 괄호 회전하기
- 프로그래머스 괄호 회전하기 python
- 유니티기초
- 괄호 회전하기 파이썬
- 타입스크립트 기초문법
- 스프링게시판프로젝트
- typescript 기초문법
- 유니티Material
- spring jpa 게시판
- springboot 미니프로젝트
- spring jpa 사이드프로젝트
Archives
- Today
- Total
Digking's cave
My First Blog Project (15) : 게시판 글쓰기 본문
728x90
로그인 한 후에 글쓰기를 누르면 board/saveForm으로 간다.
saveForm이 열리고 글쓰기 완료를 누르면 board.js로 가서 data를 /api/board로 날린다.
title,content를 가지고 BoardApiController에 가서, principal을 통해 user정보를 가지고 boardService가 실행된다.
boardService에서 저장을 실행 후 정상적으로 완료되면 정상완료 응답이 온다.
board.js 에서 done을 실행하고 끝난다.
WEB-INF/views/board/saveForm.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ include file="../layout/header.jsp" %>
<div class="container">
<form>
<div class="form-group">
<label for="title">Title</label>
<input type="text" class="form-control" placeholder="Enter Title" id="title">
</div>
<div class="form-group">
<label for="content">Content</label>
<textarea class="form-control summernote" rows="5" id="content"></textarea>
</div>
</form>
<button id="btn-save" class="btn btn-primary">글쓰기 완료</button>
</div>
<script>
$('.summernote').summernote({
placeholder: 'Hello Bootstrap 4',
tabsize: 2,
height: 300
});
</script>
<script src="/js/board.js"></script>
<%@ include file="../layout/footer.jsp" %>
board.js
let index = {
init: function(){
$("#btn-save").on("click",()=>{
this.save();
});
},
save:function(){
let data = {
title: $("#title").val(),
content: $("#content").val()
};
$.ajax({
type:"POST",
url:"/api/board",
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8"
}).done(function(resp){
alert("글쓰기가 완료되었습니다.");
location.href = "/";
}).fail(function(error){
alert(JSON.stringify(error));
});
}
}
index.init();
controller/api/boardApiController.java
package com.cos.blog.controller.api;
import com.cos.blog.config.auth.PrincipalDetail;
import com.cos.blog.dto.ResponseDto;
import com.cos.blog.model.Board;
import com.cos.blog.service.BoardService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class BoardApiController {
@Autowired
private BoardService boardService;
@PostMapping("/api/board")
public ResponseDto<Integer> save(@RequestBody Board board, @AuthenticationPrincipal PrincipalDetail principal) { // username, password, email
boardService.글쓰기(board,principal.getUser());
return new ResponseDto<Integer>(HttpStatus.OK.value(), 1);
}
}
BoardController.java
package com.cos.blog.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.CreationTimestamp;
import javax.persistence.*;
import java.sql.Timestamp;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity
public class Board {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(nullable = false,length = 100)
private String title;
@Lob //대용량 데이터에 사용
private String content;
// 조회수
private int count;
@OneToMany(mappedBy = "board",fetch = FetchType.EAGER)
//mappedBy : 연관관계의 주인이 아니다.(난 FK가 아니에요, DB에 칼럼을 만들지 마세요)
//fetch = FetchType.LAZY : 엄청 많이 가져오니까, 필요하면 가져오고 아니면 안가져올게
private List<Reply> reply;
@ManyToOne(fetch = FetchType.EAGER)
//Many =Many, User=One
//fetch = FetchType.EAGER : user정보는 하나니까 바로 가져올게
@JoinColumn(name="userId")
//필드이름은 userId로 만들어지고, 연관관게는 manytoone
//User를 참조하고, 자동으로 FK가 만들어진다
private User user;
@CreationTimestamp
private Timestamp createData;
}
service/BoardService.java
package com.cos.blog.service;
import com.cos.blog.model.Board;
import com.cos.blog.model.User;
import com.cos.blog.repository.BoardRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class BoardService {
@Autowired
private BoardRepository boardRepository;
@Transactional
public void 글쓰기(Board board, User user){
board.setCount(0);
board.setUser(user);
boardRepository.save(board);
}
}
반응형
'Spring > My First Blog Project' 카테고리의 다른 글
My First Blog Project (17) : 게시판 글 목록 페이징처리 (0) | 2022.12.26 |
---|---|
My First Blog Project (16) : 게시판 글 목록 보기 (0) | 2022.12.26 |
My First Blog Project (14) : SpringSecurity 로그인 구현 (0) | 2022.12.21 |
My First Blog Project (13) : 비밀번호 해쉬화 회원가입 / 권한에 따른 페이지 처리 (0) | 2022.12.20 |
My First Blog Project (12) : SpringSecurit 적용 및 로그인 페이지 생성 (0) | 2022.12.19 |