mvn repository 추가
<!-- json용 repository -->
<!-- jackson-databind -->
<!-- ajax사용하기 위해서 json repositry 사용 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.14.2</version>
</dependency>
폼 띄우기 mapping
@GetMapping("/jsonex1")
public String ex1()
{
return "ex1";
}
@GetMapping("/jsonex2")
public String ex2()
{
return "ex2";
}
package spring.mvc.json;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import javax.annotation.processing.Generated;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* Handles requests for the application home page.
*/
@Controller
public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
/**
* Simply selects the home view to render by returning its name.
*/
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
logger.info("Welcome home! The client locale is {}.", locale);
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
String formattedDate = dateFormat.format(date);
model.addAttribute("serverTime", formattedDate );
return "start";
}
@GetMapping("/jsonex1")
public String ex1()
{
return "ex1";
}
@GetMapping("/jsonex2")
public String ex2()
{
return "ex2";
}
}
일반적인 @Controller에서
json으로 처리한다음 웹에 출력하고 싶을때 @ResponseBody 사용
list db를 가져오기 위해서 List<> 사용
Map은 json 간단하게 테스트하기 위해서 사용
Map은 인터페이스 이기 때문에 뒤에 생성은 HashMap으로 생성
바로 확인하고 싶으면 위에 @GetMapping("/list1")에 있는 mapping 주소를 url에 수정해서 확인 가능
@GetMapping("/list1")
// 일반적인 @Controller에서
// json으로 처리한다음 웹에 출력하고 싶을때 @ResponseBody 사용
// 바로 확인하고 싶으면 위에 @GetMapping("/list1")에 있는 mapping 주소를 url에 수정해서 확인 가능
@ResponseBody /* json 처리 후 브라우저로 출력(일반 컨트롤러일 경우) */
//list db를 가져오기 위해서 List<> 사용
//Map은 json 간단하게 테스트하기 위해서 사용
public Map<String, String> list1()
{
//Map은 인터페이스 이기 때문에 뒤에 생성은 HashMap으로 생성
Map<String, String> map=new HashMap<String, String>();
map.put("name", "장순영"); // -> {"name":"장순영"}으로 변환되게해야지 json형태
map.put("hp", "010-222-3333");
map.put("addr", "수원시 장안구");
return map;
}
ajax 사용시 url은 mapping 주소 넣어준다
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Cute+Font&family=Diphylleia&family=Dokdo&family=Nanum+Brush+Script&family=Nanum+Gothic+Coding&family=Noto+Sans+KR&display=swap" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.7.0.js"></script>
<title>Insert title here</title>
</head>
<body>
<h3>ex1번 예제</h3>
<br>
<button type="button" id="btn1" class="btn btn-info">list1 json데이터 출력하기</button>
<div id="out1"></div>
<script type="text/javascript">
$("#btn1").click(function(){
$.ajax({
type:"get",
dataType:"json",
/* url에는 mapping 주소 넣어준다 */
url:"list1",
success:function(res){
$("#out1").empty();
$("#out1").append("이름: "+res.name+"<br>");
$("#out1").append("핸드폰: "+res.hp+"<br>");
$("#out1").append("주소: "+res.addr+"<br>");
}
});
});
</script>
</body>
</html>
json처리 전용 컨트롤러
json으로 처리해서 브라우저로 띄어주는 것만 가능...오로지 ajax를 위한 Controller
package spring.mvc.json;
import java.util.HashMap;
import java.util.Map;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
//json으로 처리해서 브라우저로 띄어주는 것만 가능...오로지 ajax를 위한 Controller
@RestController /* json처리 전용 컨트롤러 */
public class JsonTest2Controller {
@GetMapping("/list2")
public Map<String, String> list2()
{
Map<String, String> map=new HashMap<String, String>();
map.put("product", "맥북");
map.put("price", "250만원");
map.put("warrenty", "구입일로부터 2년까지");
return map;
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Cute+Font&family=Diphylleia&family=Dokdo&family=Nanum+Brush+Script&family=Nanum+Gothic+Coding&family=Noto+Sans+KR&display=swap" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.7.0.js"></script>
<title>Insert title here</title>
</head>
<body>
<h3>ex2번 예제</h3>
<br>
<button type="button" id="btn2" class="btn btn-danger">list2 json데이터 출력하기</button>
<div id="out2"></div>
<script type="text/javascript">
$("#btn2").click(function(){
$.ajax({
data:"get",
dataType:"json",
url:"list2",
success:function(data){
$("#out2").empty();
$("#out2").append("상품이름: "+data.product+"<br>");
$("#out2").append("상품가격: "+data.price+"<br>");
$("#out2").append("보증기간: "+data.warrenty+"<br>");
}
});
});
</script>
</body>
</html>
위치는 위나 아래나 상관없다
list 복수의 데이터 넣으려고 사용
dto꾸러미를 넣기 위해 list 생성
<>안에 들어간 자료형,클래스에 따라서 넣은 수 있다
List<PhotoDto> list=new ArrayList<PhotoDto>();
dto에 만든 생성자 인자값에 ("냥뇽녕냥1", "1.jpeg")을 넣어줘서 순서대로 name 과 photo로 받을 수 있다
list.add(new PhotoDto("냥뇽녕냥1", "1.jpeg"));
list.add(new PhotoDto("냥뇽녕냥2", "2.jpeg"));
list.add(new PhotoDto("냥뇽녕냥3", "3.jpeg"));
list.add(new PhotoDto("냥뇽녕냥4", "4.jpeg"));
list.add(new PhotoDto("냥뇽녕냥6", "6.jpeg"));
return list;
@GetMapping("/list3")
//@ResponseBody의 위치는 위나 아래나 상관없다
//list 복수의 데이터 넣으려고 사용
public @ResponseBody List<PhotoDto> list3()
{
//dto꾸러미를 넣기 위해 list 생성
//<>안에 들어간 자료형,클래스에 따라서 넣은 수 있다
List<PhotoDto> list=new ArrayList<PhotoDto>();
//dto에 만든 생성자 인자값에 ("냥뇽녕냥1", "1.jpeg")을 넣어줘서 순서대로 name 과 photo로 받을 수 있다
list.add(new PhotoDto("냥뇽녕냥1", "1.jpeg"));
list.add(new PhotoDto("냥뇽녕냥2", "2.jpeg"));
list.add(new PhotoDto("냥뇽녕냥3", "3.jpeg"));
list.add(new PhotoDto("냥뇽녕냥4", "4.jpeg"));
list.add(new PhotoDto("냥뇽녕냥6", "6.jpeg"));
return list;
}
figure 태그 : 사진을 담는 태그
figcaption 태그 : 설명을 담는 태그
<script type="text/javascript">
$("#btn3").click(function(){
$.ajax({
data:"get",
dataType:"json",
url:"list3",
success:function(res){
var s="";
$.each(res,function(i,elt){
/* figure 사진을 담는 태그 / figcaption 설명을 담는 태그 */
s+="<figure>";
s+="<img src='image/"+elt.photo+"' width='100'>";
s+="<figcaption><b>";
s+=elt.name;
s+="</b></figcaption>";
s+="</figure>";
});
$("#out3").html(s);
}
});
});
</script>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Cute+Font&family=Diphylleia&family=Dokdo&family=Nanum+Brush+Script&family=Nanum+Gothic+Coding&family=Noto+Sans+KR&display=swap" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.7.0.js"></script>
<title>Insert title here</title>
</head>
<body>
<h3>ex3번 예제</h3>
<br>
<button type="button" id="btn3" class="btn btn-warning">list3 json 배열 데이터 출력하기</button>
<div id="out3"></div>
<script type="text/javascript">
$("#btn3").click(function(){
$.ajax({
data:"get",
dataType:"json",
url:"list3",
success:function(res){
var s="";
$.each(res,function(i,elt){
/* figure 사진을 담는 태그 / figcaption 설명을 담는 태그 */
s+="<figure>";
s+="<img src='image/"+elt.photo+"' width='100'>";
s+="<figcaption><b>";
s+=elt.name;
s+="</b></figcaption>";
s+="</figure>";
});
$("#out3").html(s);
}
});
});
</script>
</body>
</html>
이름 입력칸에 입력하는 name을 가져오기 위해 인자값에 그 name을 가져오는 것을 줬다
db에 넣어주려면 form에 있는 @RequestParam을 가져오는 것이지만
지금은 인위적으로 값을 넣어주기 위해서 dto에 있는 name을 가져온 것
ex4에 있는 input창에 입력하는 것이 parameter값
public Map<String, Object> list4(@RequestParam String name)
list.add(new PhotoDto("냥뇽녕냥1", "1.jpeg"));
list.add(new PhotoDto("냥뇽녕냥2", "2.jpeg"));
list.add(new PhotoDto("냥뇽녕냥3", "3.jpeg"));
list.add(new PhotoDto("냥뇽녕냥4", "4.jpeg"));
list.add(new PhotoDto("냥뇽녕냥6", "6.jpeg"));
list가 반복하는 동안 같은 냥뇽녕냥(번호)가 있다면 나오도록 map에 넣어줘야하기 때문에 생성
Map<String, Object> map=new HashMap<String, Object>();
list에 넣어준 값이 아닌 경우 없는 사진을 주기 위해 먼저 만들어줌
map.put("name", "없는 사진");
map.put("photo", "5.jpeg");
위에 생성자에 해당하는 것을 만든 것을 dto에 넣어주는데 칸에 입력한 이름이 같으면 map에 1개의 list값을 넣어준다
for(PhotoDto dto:list)
{
//input칸에 입력한 값이 list에 넣은 값(dto.getName())과 일치하면 map에 넣어준다
if(name.equals(dto.getName()))
{
map.put("name", dto.getName());
map.put("photo", dto.getPhoto());
}
}
@GetMapping("/list4")
//이름 입력칸에 입력하는 name을 가져오기 위해 인자값에 그 name을 가져오는 것을 줬다
//db에 넣어주려면 form에 있는 @RequestParam을 가져오는 것이지만
//지금은 인위적으로 값을 넣어주기 위해서 dto에 있는 name을 가져온 것
//ex4에 있는 input창에 입력하는 것이 parameter값
public Map<String, Object> list4(@RequestParam String name)
{
List<PhotoDto> list=new ArrayList<PhotoDto>();
//dto에 있는 생성자에 해당하는 것을 만든 것
list.add(new PhotoDto("냥뇽녕냥1", "1.jpeg"));
list.add(new PhotoDto("냥뇽녕냥2", "2.jpeg"));
list.add(new PhotoDto("냥뇽녕냥3", "3.jpeg"));
list.add(new PhotoDto("냥뇽녕냥4", "4.jpeg"));
list.add(new PhotoDto("냥뇽녕냥6", "6.jpeg"));
//list가 반복하는 동안 같은 냥뇽녕냥(번호)가 있다면 나오도록 map에 넣어줘야하기 때문에 생성
Map<String, Object> map=new HashMap<String, Object>();
//list에 넣어준 값이 아닌 경우 없는 사진을 주기 위해 먼저 만들어줌
map.put("name", "없는 사진");
map.put("photo", "5.jpeg");
//위에 생성자에 해당하는 것을 만든 것을 dto에 넣어주는데 칸에 입력한 이름이 같으면 map에 1개의 list값을 넣어준다
for(PhotoDto dto:list)
{
//input칸에 입력한 값이 list에 넣은 값(dto.getName())과 일치하면 map에 넣어준다
if(name.equals(dto.getName()))
{
map.put("name", dto.getName());
map.put("photo", dto.getPhoto());
}
}
return map;
}