Burger
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.io.Serializable;
import java.util.List;
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Data
public class Burger implements Serializable {
private String name;
private int price;
private List ingredients;
}
BurgerTest
import com.example.firstproject.ioc.Ingredient;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.junit.jupiter.api.Test;
import org.springframework.test.web.reactive.server.WebTestClient;
import javax.persistence.criteria.CriteriaBuilder;
import java.util.Arrays;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
class BurgerTest {
@Test
public void 자바_객체를_JSON으로_변환() throws JsonProcessingException {
ObjectMapper objectMapper=new ObjectMapper();
List ingredients= Arrays.asList("치즈", "쇠고기", "새우");
Burger burger=new Burger("맥도날드 햄버거", 4500, ingredients);
//자바 객체를 JSON 으로 변환
String json =objectMapper.writeValueAsString(burger);
//테스트 검증
String expected="{\"name\":\"맥도날드 햄버거\",\"price\":4500,\"ingredients\":[\"치즈\",\"쇠고기\",\"새우\"]}";
assertEquals(expected, json);
//JSON 이쁘게 출력
JsonNode jsonNode =objectMapper.readTree(json);
System.out.println(jsonNode.toPrettyString());
}
@Test
public void JSON을_자바_객체로_변환() throws JsonProcessingException {
ObjectMapper objectMapper=new ObjectMapper();
String json="{\"name\":\"맥도날드 햄버거\",\"price\":4500,\"ingredients\":[\"치즈\",\"쇠고기\",\"새우\"]}";
//JSON을 자바 객체로 변환
Burger burger=objectMapper.readValue(json, Burger.class);
List ingredients= Arrays.asList("치즈", "쇠고기", "새우");
Burger expected=new Burger("맥도날드 햄버거", 4500, ingredients);
//테스트 검증
assertEquals(expected.toString(), burger.toString());
System.out.println(json);
System.out.println(burger.toString());
//JSON 이쁘게 출력
JsonNode jsonNode=objectMapper.readTree(json);
System.out.println(jsonNode.toPrettyString());
}
@Test
public void JSON_Node_를_직접생성() throws JsonProcessingException{
ObjectMapper objectMapper = new ObjectMapper();
/*
{
"name" : "맥도날드 햄버거",
"price" : 4500,
"ingredients" : [ "치즈", "쇠고기", "새우" ]
}
*/
ObjectNode objectNode=objectMapper.createObjectNode();
objectNode.put("name", "맥도날드 햄버거");
objectNode.put("price", 4500);
ArrayNode arrayNode=objectMapper.createArrayNode();
arrayNode.add("치즈");
arrayNode.add("쇠고기");
arrayNode.add("새우");
objectNode.set("ingredients", arrayNode);
String json =objectNode.toString();
System.out.println(" 값 =>");
System.out.println(json);
System.out.println(objectNode.toPrettyString());
}
}
스프링 부트 에서는 ResponseEntity 객체를 통해 자동으로 json 으로 전환처리 된다.
ResponseEntity 에 리스트 객체만 넣고 반화처리만 해주면 된다.
ResponseEntity>
예)
import java.util.List;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.pcw.prod.model.Product;
import com.pcw.utils.DanawProductCrawling;
@RestController
@RequestMapping("/api")
public class ProductApiController {
/**
* 인덱스 메인화면 상품 목록 가져오기
* @return
*/
@GetMapping(value = "/mainProducts")
public ResponseEntity> mainProducts(DanawProductCrawling danawProductCrawling) {
//다나와 메인 인덱스 화면 제품만 가져오기
List product=danawProductCrawling.getMainProducts();
return ResponseEntity.status(HttpStatus.OK).body(product);
}
}
json 출력물
// 20220529153538
// http://localhost/api/mainProducts
[
{
"id": "13621058",
"thumbLink": "http://prod.danawa.com/info/?pcode=13621058&cate=11236452",
"thumbImage": "//img.danawa.com/prod_img/500000/058/621/img/13621058_1.jpg?shrink=130:130&_v=20220125170310",
"prodName": "레노버 LEGION 5 Pro 16ACH R7 STORM",
"specList": "40.6cm(16인치) / AMD / 라이젠7-4세대 / 세잔 / 5800H (3.2GHz) / 옥타코어 / 운영체제(OS): 미포함(프리도스) / 2560x1600(WQXGA) / NTSC: 72% / sRGB: 100% / 500nit / 주사율: 165Hz / IPS / 광시야각 / 눈부심방지 / 슬림형 베젤 / DDR4 / 메모리: 16GB / 3200MHz / M.2(NVMe) / 512GB / 외장그래픽 / RTX3060 / TGP: 130W / VRAM:6GB / 기가비트 유선랜 / 802.11ax(Wi-Fi 6) / HDMI 2.1 / 웹캠(HD) / USB-C: 지원 / USB 3.0 / RGB 라이트 / 웹캠OFF 지원 / ㅗ형 방향키 / 숫자 키패드(4열) / 배터리: 80Wh / 충전단자: 전용포트 / 두께: 21.7mm / 무게: 2.59kg / 일반유통상품 / 용도: 게임용, 그래픽작업용 / 색상: 그레이 / 2021년 12월 제조사 MTM 변경 (82JQ003MKR > 82JQ00SDKR)",
"mtDate": "2021.03.",
"price": 1625000
},
{
"id": "adReaderProductItem12625265",
"thumbLink": "http://prod.danawa.com/info/?pcode=12625265&cate=112747",
"thumbImage": "//img.danawa.com/prod_img/500000/265/625/img/12625265_1.jpg?shrink=130:130",
"prodName": "AMD 라이젠5-4세대 5600X (버미어) (멀티팩(정품))",
"specList": "AMD(소켓AM4) / 4세대(Zen3) / 7nm / 6코어 / 12쓰레드 / 기본 클럭: 3.7GHz / 최대 클럭: 4.6GHz / L3 캐시: 32MB / TDP: 65W / PCIe4.0 / 메모리 규격: DDR4 / 3200MHz / 내장그래픽: 미탑재 / 기술 지원: StoreMI, Ryzen Master, VR Ready 프리미엄 / 쿨러: Wraith Stealth 포함",
"mtDate": "2020.11.",
"price": 211420
},
{
"id": "adReaderProductItem16084070",
"thumbLink": "http://prod.danawa.com/info/?pcode=16084070&cate=112751",
"thumbImage": "//img.danawa.com/prod_img/500000/070/084/img/16084070_1.jpg?shrink=130:130",
"prodName": "ASUS PRIME B660M-K D4 인텍앤컴퍼니",
"specList": "인텔(소켓1700) / 인텔 B660 / M-ATX (24.4x21.1cm) / 전원부: 6+1+1페이즈 / 메모리 DDR4 / 5333MHz (PC4-42600) / 2개 / 메모리 용량: 최대 64GB / XMP / 옵테인 / 확장슬롯 VGA 연결: PCIe4.0 x16 / PCIe버전: PCIe4.0, PCIe3.0, PCIe / PCIex16: 1개 / PCIex1: 2개 / 저장장치 SATA3: 4개 / M.2: 2개 / PCIe / NVMe / PCIe4.0 / 후면단자 D-SUB / HDMI / USB 3.0 / USB 2.0 / RJ-45 / 오디오잭 / PS/2 / 랜/오디오 Realtek 계열 / 최대 기가비트 / RJ-45: 1개 / Realtek 계열 / 7.1채널(8ch) / 내부I/O RGB 헤더(4핀): 1개 / 시스템팬 헤더(4핀): 1개 / USB2.0 헤더: 2개 / USB3.0 헤더: 1개 / 특징 UEFI / LED 헤더 / TPM헤더",
"mtDate": "2022.01.",
"price": 142850
},
{
"id": "14397899",
"thumbLink": "http://prod.danawa.com/info/?pcode=14397899&cate=112753",
"thumbImage": "//img.danawa.com/prod_img/500000/899/397/img/14397899_1.jpg?shrink=130:130&_v=20220517143454",
"prodName": "MSI 지포스 RTX 3080 Ti 슈프림 X D6X 12GB 트라이프로져2S",
"specList": "RTX 3080 Ti / 8nm / 부스트클럭: 1845MHz / 스트림 프로세서: 10240개 / PCIe4.0x16 / GDDR6X(DDR6X) / 출력단자: HDMI2.1, DP1.4 / 부가기능: 제로팬(0-dB기술), 8K 해상도 지원, 4K 해상도 지원, HDR 지원, Dual BIOS, HDCP 2.3 / 사용전력: 최대 400W / 정격파워 850W 이상 / 전원 포트: 8핀 x3개 / 3개 팬 / 가로(길이): 336mm / 백플레이트 / LED 라이트 / MYSTIC LIGHT / 그래픽카드 지지대 포함",
"mtDate": "2021.06.",
"price": 1597000
},
{
"id": "adReaderProductItem11961251",
"thumbLink": "http://prod.danawa.com/info/?pcode=11961251&cate=112760",
"thumbImage": "//img.danawa.com/prod_img/500000/251/961/img/11961251_1.jpg?shrink=130:130",
"prodName": "타무즈 GK600 PRIME (250GB)",
"specList": "내장형SSD / 6.4cm(2.5형) / SATA3 (6Gb/s) / TLC(기타) / 3D낸드 / DDR3 256MB / 컨트롤러: 실리콘모션 / [성능] 순차읽기: 560MB/s / 순차쓰기: 520MB/s / 읽기IOPS: 90K / 쓰기IOPS: 90K / [지원기능] TRIM / GC / SLC캐싱 / S.M.A.R.T / DEVSLP / ECC / [환경특성] TBW: 200TB / A/S기간: 5년 / 두께: 7mm / [기타] 컨트롤러 SM2259H 또는 SM2258H / 탑재된 컨트롤러 확인요망",
"mtDate": "2020.08.",
"price": 47000
},
{
"id": "15354266",
"thumbLink": "http://prod.danawa.com/info/?pcode=15354266&cate=11236849",
"thumbImage": "//img.danawa.com/prod_img/500000/266/354/img/15354266_1.jpg?shrink=130:130&_v=20211001100127",
"prodName": "다나와표준PC 게임용 211009",
"specList": "AMD / 라이젠5-4세대 / 세잔 / 5600G (3.9GHz) / (AMD) A520 / DDR4 / 16GB / SSD / 240GB / 라데온 그래픽스 7 / 1Gbps 유선 / HDMI / D-SUB / USB 3.0 / 500W / 운영체제 미포함 / 미들타워 / 용도: 사무/인강용",
"mtDate": "2021.10.",
"price": 491040
},
{
"id": "adReaderProductItem16193474",
"thumbLink": "http://prod.danawa.com/info/?pcode=16193474&cate=112752",
"thumbImage": "//img.danawa.com/prod_img/500000/474/193/img/16193474_1.jpg?shrink=130:130",
"prodName": "G.SKILL DDR5-6000 CL36 TRIDENT Z5 RGB J 패키지 (32GB(16Gx2))",
"specList": "데스크탑용 / DDR5 / 6000MHz (PC5-48000) / 램타이밍: CL36-36-36-96 / 1.35V / 램개수: 2개 / LED 라이트 / XMP3.0 / 온다이ECC / 히트싱크: 방열판 / 방열판 색상: 블랙 / LED색상: RGB / LED 시스템: AURA SYNC, MYSTIC LIGHT, RGB FUSION, POLYCHROME",
"mtDate": "2022.01.",
"price": 530000
},
{
"id": "15462674",
"thumbLink": "http://prod.danawa.com/info/?pcode=15462674&cate=11236463",
"thumbImage": "//img.danawa.com/prod_img/500000/674/462/img/15462674_1.jpg?shrink=130:130&_v=20220215194029",
"prodName": "APPLE 2021 맥북프로16 MK193KH/A",
"specList": "41.05cm(16.2인치) / 애플(ARM) / 실리콘 M1 PRO / APL1103 / 10코어(8+2) / 운영체제(OS): macOS Monterey / 3456x2234 / DCI-P3: 지원 / 1000nit / 주사율: 120Hz / miniLED / 트루톤 / 메모리: 16GB / SSD / 1TB / 내장그래픽 / M1 PRO 16 core / 802.11ax(Wi-Fi 6) / HDMI / 웹캠(FHD) / 썬더볼트4: 3개(USB-C겸용) / USB 4.0 / SD카드 / 키보드 라이트 / 지문 인식 / 고속충전 / USB-PD / DP Alt Mode / ㅗ형 방향키 / 배터리: 100Wh / 어댑터: 140W / 충전단자: MagSafe 3 / 두께: 16.8mm / 무게: 2.1kg / 일반유통상품 / 용도: 그래픽작업용, 사무/인강용 / 색상: 그레이 / 16코어 Neural Engine / 최대 200GB/s 메모리 대역폭 / 미디어 엔진 (디코딩+인코딩+ProRes)",
"mtDate": "2021.10.",
"price": 3336830
}
]
javascript 에서 json 객체 가져오기
let danaw={
init:function(){
$(".danawMenu").on("click",(e)=>{
e.preventDefault();
const event=e.target
const menu=$(event).attr("data-menu");
console.log(menu);
this.getProduct("/api/danaw/"+menu);
});
},
getProduct:function(url){
danawCrawlingProduct(url);
}
}
danaw.init();
//다나와 크로링 제품 가져오기 파라미터 값 url
function danawCrawlingProduct(url){
//로딩 시작
$("#page-loading").show();
//json 형태의 데이터를 가져온다.
$.getJSON(url, function(data){
let items =[];
$.each(data, function(index, product){
//const id=product.id;
const thumbLink=product.thumbLink;
const thumbImage=product.thumbImage;
const prodName=product.prodName;
const price=commaSetting(product.price);
//console.log(thumbLink, thumbLink, prodName, price);
//items 배열에 등록한다.
if(index<30){
items.push(
`
<li class="product-list-item">
<a href="${thumbLink}" target="_blank">
<div>
<img src="${thumbImage}" alt="">
</div> <span class="product-name">${prodName}</span> <span
class="product-price">${price}<span>원</span></span>
</a>
</li>
`
);
}
});
//product-lis 클래스에 데이터를 넣는다.
$(".product-list").html(items);
if(url!=="/api/mainProducts"){ // 메인 페이지가 아니라면 하단 css 수정
const pcBest="<div class='pcw-best-shoppingmall-box'>"+$(".pcw-best-shoppingmall-box").html() +"</div>";
const footer="<footer>" +$("footer").html()+"</footer>" ;
$(".pcw-best-shoppingmall-box").remove();
$("footer").remove();
$("#pcw-best").append(pcBest);
$("#wrap").append(footer);
let height=$(".pcw-best-seller-box").css("height").replace("px","");
//console.log(parseInt(height)+430+"px");
$("#pcw-best").css("position", "relative").css("top", parseInt(height)+450+"px");
$("footer").css("top", parseInt(height)+450+"px");
}
//로딩 끝
$("#page-loading").hide();
});
}
//정규식을 이용하여 3자리마다 콤마 넣기
function commaSetting(price){
return price.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}
출처 : 홍팍
https://www.youtube.com/watch?v=9-8aE9GonlM&list=PLyebPLlVYXCiYdYaWRKgCqvnCFrLEANXt&index=33
https://cloudstudying.kr/lectures/495https://cloudstudying.kr/lectures/495

















댓글 ( 5)
댓글 남기기