IT/JAVA

CRUD

iamhyeon 2024. 10. 1. 14:16

JSON 예제 ▽

 

 

폴더구조


 

- Lombok을 사용한 데이터 모델 클래스 또는 엔티티 클래스

- 일반적으로 데이터베이스의 테이블 구조와 매핑되기도 한다

@Data 어노테이션:
- Lombok 라이브러리에서 제공하는 어노테이션

- 자동으로 getter, setter, toString, equals, hashCode 메서드를 생성해준다

 

> model > Department.java ▽

package com.hyeon.model;

import lombok.Data;

@Data
public class Department {
    private int id;
    private String dname;
    private String loc;
}

 

- Retrofit 라이브러리를 사용한 API 인터페이스 메서드 정의

- service
- 이 프로그램이 수행해야하는 업무리스트

> service > DepartmentService.java 

package com.hyeon.service;

import java.util.List;

import com.hyeon.model.Department;

import retrofit2.http.DELETE;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Path;
import retrofit2.http.Query;
import retrofit2.Call;

public interface DepartmentService {
    public static final String BASE_URL = "http://localhost:3001";

    /**
     * 학과 정보 저장
     * @param dname - 학과이름
     * @param loc - 위치
     * @return Department 객체
     */
    @FormUrlEncoded     // POST, PUT, DELETE 방식 전송일 경우 명시
    @POST("/department")    // 데이터 저장 요청                 ** Create **
    Call<Department> addDepartment(@Field("dname") String dname, @Field("loc") String loc);

    /**
     * 학과 정보 조회
     * @param id - 학과번호
     * @return Department 객체
     */
    @GET("/department/{id}")        //  ** Read **
    Call<Department> getDepartment(@Path("id") int id);

    /**
     * 검색한 학과 조회
     * @param dname - 학과이름
     * @return Department List 객체
     */
    @GET("/department")         // ** Read **
    Call<List<Department>> listDepartment(@Query("dname_like") String dname);

    /**
     * 학과 정보 수정
     * @param id - 학과번호
     * @param dname - 학과이름
     * @param loc - 위치
     * @return Department 객체
     */
    @FormUrlEncoded
    @PUT("/department/{id}")        // ** Upadate **
    Call<Department> updateDepartment(@Path("id") int id, @Field("dname") String dname, @Field("loc") String loc);

    /**
     * 학과 정보 삭제
     * @param id - 학과번호
     * @return Department 객체
     */
    @DELETE("/department/{id}")         // ** Delete **
    Call<Department> deleDepartment(@Path("id") int id);
}

 

- @Field는 @FormUrlEncoded 요청에서 보내는 각각의 필드를 정의한다
- addDepartment(@Field("dname") String dname, @Field("loc") String loc);

이 코드에서는 dname과 loc이라는 두 개의 필드가 서버로 전송된다

 

- Call<Department>는 Retrofit이 반환하는 비동기 작업의 결과를 나타낸다
- Call 객체는 enqueue() 메서드를 통해 비동기 요청을 보내거나, execute() 메서드로 동기 요청을 보낼 수 있다

 

- @GET("/department/{id}") 

- {id}는 경로 변수(Path Parameter)로, 학과 번호(ID)가 해당 위치에 들어가 서버로 전송된다

 

- Call<Department> getDepartment(@Path("id") int id);

- @Path 어노테이션은 메서드 매개변수(id)를 URL 경로의 특정 부분에 매핑한다
- 여기서는 URL의 {id} 부분에 int id 값을 삽입하여, GET /department/1과 같은 형식의 요청을 생성한다

 

- Call<List<Department>> listDepartment(@Query("dname_like") String dname);
- @Query 어노테이션은 HTTP 요청의 쿼리 파라미터를 정의한다
- 이 경우 dname_like라는 쿼리 파라미터에 학과 이름의 일부를 전달한다

- 예를 들어, dname_like=Computer가 전달되면, 이름에 "Computer"가 포함된 학과들을 검색하게 된다
- 서버에서 학과 이름에 특정 문자열이 포함된 학과들을 필터링해서 반환할 수 있다

 

 

 

 

 

 

 

반응형

'IT > JAVA' 카테고리의 다른 글

JDBC  (1) 2024.10.08
JDK 설치  (0) 2024.10.06
Java Exception Error  (1) 2024.09.30
Lombok (Gradle)  (0) 2024.09.30
for-each  (1) 2024.09.30