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 |