본문 바로가기
728x90

🍃 𝗦𝗽𝗿𝗶𝗻𝗴 𝗕𝗼𝗼𝘁36

[SpringBoot] 스프링 controller에서 json 받기 (@RequestBody, @ResponseBody 어노테이션 사용) @RequestBody, @ResponseBody 어노테이션을 사용하여 컨트롤러에서 JSON 데이터를 주고받을 수 있다. api 요청 프로그램으로 사용한다면 Content-Type을 꼭 application/x-www-form-urlencoded 로 설정해주어야 한다. 1. @RequestBody로 JSON 정보 받기 JSON 형태의 정보를 Map과 커맨드 객체로 변환하기 위해 jackson 의존성 추가. implementation('org.springframework.boot:spring-boot-starter-web') 2. Ajax 간단한 페이지 작성 (home.jsp) Ajax 컨트롤러로 요청을 보낼 ajax 함수. JSON.stringify 함수를 이용하여 데이터를 보내고 contentType을.. 2022. 10. 25.
[Springboot] ResponseEntity란? Spring에서는 HTTP Response 를 만드는 것이 주요한 관심사다. 200, 404 등 각각의 응답의 상태 코드뿐만 아니라, Body 에 들어갈 내용도 넣어 주어야 한다. 이 세 가지 요소를 채운 객체를 만드는 것, 즉 이 데이터를 받아서 자동으로 구성해주는 것이 바로 @ResponseBody 와 ResponseEntity다. ​ @ResponseBody 우선 @ResponseBody는 HTTP 규격에 맞는 응답을 만들어주기 위한 Annotation 이다. HTTP 요청을 객체로 변환하거나, 객체를 응답으로 변환하는 HttpMessageConverter를 사용한다. 스프링부트 @RequestBody와 @ReponseBody Annotation을 추가하는 것으로 간단하게 처리를 할 수 있다는 점이.. 2022. 9. 16.
Builder Pattern 빌더 패턴의 특징, 장점 (@Builder 사용이유, @Builder 예제) entity나 Dto객체에 값을 넣어줄때, 롬복의 빌더 애노테이션(@Builder)을 사용하는 예제들이 많다. 객체를 생성하기 위해서는 생성자 패턴, 자바빈 패턴, 빌더 패턴 등을 사용할 수 있는데, 이 빌더 패턴을 쓰는 이유가 무엇일까? ​ 우선 빌더 패턴이란 디자인패턴중 하나로, 생성과 표현의 분리다. 클래스를 설계하다보면 필수로 받야할 인자들이 있고 선택적으로 받야할 인자들이 있는데, 쉽게 말해 생성자에서 인자가 많을때 고려해 볼수있는것이 바로 이 빌더패턴이다. 왜 그런 것인지 다른 패턴들과 함께 비교해보자. ​ Telescoping Constructor Pattern 점층적 생성자 패턴 각 생성자를 오버로딩 해서 만드는 기초적인 방식이다. 필수적으로 값이 있어야할 멤버변수를 위해 생성자에 매개변수.. 2022. 9. 16.
[Spring data JPA] Auditing (AuditingEntityListener) 1. Jpa Auditing 이란? Auditing이란? Java에서 ORM 기술인 JPA를 사용하여 도메인을 관계형 데이터베이스 테이블에 매핑할 때, 공통적으로 도메인들이 가지고 있는 필드나 컬럼들이 존재한다. 대표적으로 생성일자, 수정일자, 식별자 같은 필드 및 컬럼들.. 그런데 이것들이 도메인마다 공통으로 존재한다는 의미는 결국 코드가 중복된다는 말이다. 이 중복으로 인한 번거로움을 해소해주기 위해 spring data JPA는 Auditing이라는 기능을 제공한다. Audit는 감독하고 검사하다는 뜻으로, 해당 데이터를 보고 있다가 생성 또는 수정이 발생하면 자동으로 값을 넣어주는 편리한 기능이다. 도메인을 영속성 컨텍스트에 저장하거나 조회를 수행한 후 update를 하는 경우, 매번 시간 데이터.. 2022. 9. 15.
[Spring] Gradle 버전 확인 방법 (1) IntelliJ의 Project Window에서 gradle > wrapper > gradle-wrapper.properties 파일을 확인해봐도 되고 (2) 터미널 명령어로 확인할 수 있다. 터미널에서 ./gradlew --version 실행 2022. 9. 15.
[Spring Jpa] nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist 발생 원인 JPA에서 부모 Entity의 @ONETOONE , @MANYTOONE 등 조인 관계 데이터 데이터 저장할 경우 에러 발생. cascade 옵션을 ALL로 처리 할 경우 부모가 save() 될때 영속성이 detached(분리)되어 persist(지속)되지 않기 때문에 에러가 발생했다. [에러 발생 코드] @ManyToOne(cascade = CascadeType.ALL) private Board board; 해결 방법 JOIN 어노테이션에 cascade 옵션 변경. JPA CASCADE옵션은 영속성 전이를 제공한다. 영속성 전이를 사용하면 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장할 수 있다. CascadeType 종류 1. CascadeType.PERSIST 엔티티를 생성하고, 연관 .. 2022. 9. 6.
[Spring Jpa] TransientPropertyValueException: object references an unsaved transient instance 에러 org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : ... 원인 JPA 연관 관계 테스트 중에 발생했다. FK 로 사용되는 컬럼값이 없는 상태에서 데이터를 넣으려다 발생한 에러이며 영속성때문에 나는 오류다. FK로 쓰는 객체가 아직 저장이 안되서 오류가 난다고 한다. 객체간 @OneToMany, @ManyToOne같은걸 쓸 때 날 수 있다. 예를 들어 Member (email, name) 이라는 테이블과 Board (id, title, member id) 라는 테이블 관계가 있을 때, Member .. 2022. 9. 6.
[Spring] DTO, VO, Model 의 차이 공통점으로는 Spring MVC에서 데이터 관리 및 비즈니스 로직을 처리하는 Model 부분. (DAO, DTO, Service..) 1. DTO(Data Transfer Object) 데이터 전송 객체. 순수하게 데이터를 담아 계층 간으로 전달하는 객체다. 로직을 갖고 있지 않은 순수한 데이터 객체이며, 데이터 '전달' 용도로만 사용하기 때문에 메서드로 getter/setter 만 갖는다. public class UserDTO { private String name; private String id; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getI.. 2022. 9. 6.
[Spring Jpa] @CreatedDate, @LastModifiedDate null 1. Application 파일에 @EnableJpaAuditing 추가 @SpringBootApplication @EnableJpaAuditing public class BoardApplication { public static void main(String[] args) { SpringApplication.run(BoardApplication.class, args); } } 2. @CreatedDate, @LastModifiedDate 선언한 entity에 위에 @EntityListeners(AuditingEntityListener.class) 선언 @MappedSuperclass @EntityListeners(value = { AuditingEntityListener.class }) @Getter .. 2022. 9. 5.
728x90