JSON(JavaScript Object Notation) : Javascript 객체 문법으로 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷
https://www.oracle.com/kr/database/what-is-json/
{
"Influencers" : [
{
"name" : "Jaxon",
"age" : 42,
"Works At" : "Tech News"
}
{
"name" : "Miller",
"age" : 35
"Works At" : "IT Day"
}
]
}
@ToString
@EqualsAndHashCode
@AllArgsConstructor
@NoArgsConstructor //jackson 라이브러리 매핑에 필요(json 을 자바객체로 변경할떄)
@Getter<properties>
<jackson.version>2.11.2</jackson.version>
</properties>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
</dependencies>객체 : const obj ={ id: 1, name: 'sana', age: 25, hobby: ['movie','yoga'] };
JSON 문자열 : " { "id": 1, "name": "sana", "age": 25, "hobby": ["movie","yoga"] }"(고객 전체 조회한것(List) 자바 객체를 json 문자열로 변환해서 응답으로 보내주기->jackson-bind 라이브러리로 매우 쉽게 할 수 있음)
public class ApiCustomerListController implements Controller {
public static final Logger logger = LoggerFactory.getLogger(ApiCustomerListController.class);
@Override
public void handle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
MybatisCustomer dao = new MybatisCustomer();
List<CustomerDto> list = dao.selectAll();
//자바객체를 json 문자열로 변환
ObjectMapper objectMapper = new ObjectMapper();
String jsonData = null;
objectMapper.writeValueAsString(list);
logger.info("전송할 json문자열: {}", jsonData);
}
```java
package day7.api;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.fasterxml.jackson.databind.ObjectMapper;
import day4.mybatis.dao.MybatisCustomer;
import day4.mybatis.dto.CustomerDto;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class ApiCustomerPostController implements Controller {
@Override
public void handle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
//사용자가 보낸 데이터는 json 문자열입니다. 이 데이터를 읽어오기 위해 입력스트림이 필요
InputStream inputStream = request.getInputStream(); //http 전송방식의 입력스트림 생성, 요청 객체로 만들어짐
//입출력의 속도 향상을 위해 버퍼 사용
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
StringBuffer sb = new StringBuffer(); //String 은 불변객체이므로 +연결을 대신하는 메소드를 사용하기 위해 필요
String line =null;
while((line = br.readLine()) != null) { //입력스트림으로부터 1줄씩 읽어옴
sb.append(line);
log.info("line: {}", line);
}
//json 문자열을 자바 객체로 변환
ObjectMapper objectMapper = new ObjectMapper();
CustomerDto dto = objectMapper.readValue(sb.toString(),CustomerDto.class);
log.info("변환된 dto: {}",dto);
//dao에서 insert
int result=0;
try {
MybatisCustomer dao = new MybatisCustomer();
result = dao.insert(dto);
} catch (Exception e) {
e.printStackTrace();
log.info("dao insert 예외: {}",e.getMessage());
}
//insert 결과에 대한 응답을 보내기
//방법2: json 문자열로 result 값 보내기 -> 직접 문자열을 만드는 대신 Map에 저장해서 변환할 수도 있음
String jsonData = "{\"result\" : "+result+"}";
response.setContentType("application/json;charset=UTF-8");
response.getWriter().print(jsonData);
//방법1
//String message = "회원등록이 완료되었습니다.";
//if(result ==0) message = "회원등록 오류입니다. ID 중복 확인하세요.";
//response.setContentType("text/plain;charset=UTF-8");
//response.getWriter().print(message); }}
```
public class ApiCustomerGetController implements Controller {
public static final Logger logger = LoggerFactory.getLogger(ApiCustomerListController.class);
@Override
public void handle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
MybatisCustomer dao = new MybatisCustomer();
CustomerDto dto = dao.getCustomer(request.getParameter("id"));
//자바객체를 json 문자열로 변환
//1) 아이디 중복검사가 아닌, 고객 정보 조회용
ObjectMapper objectMapper = new ObjectMapper(); String jsonData = null;
jsonData = objectMapper.writeValueAsString(dto);
logger.info("전송할 json문자열: {}", jsonData);
//2)아이디 중복검사인 경우에는 json으로 있다 없다에 대한 값으로 전달하기
int result = 0;
if(dto!=null)result=1;
String jsonData2 = "{\"result\" : "+result+"}";
response.setContentType("application/json;charset=UTF-8");
response.getWriter().print(jsonData2); } }