6월 30일 내용정리
@data
public class TodoDTO{
private String title;
private Date dueDate;
}
public class SampleController{
@InitBider
public void initBider(WebDataBinder binder){
SimpleDataFormat data= new SimpleDataFormat("yyyy-mm-dd");
bider.registerCustomEditor(java.util.Data.class, new CustomDataEditor(data, false))
}
@GetMapping("/ex03")
public String ex03 (TodoDTO dto){
log.info("todo: "+dto);
return "ex03"; //이걸가지고 뷰리져브가 jsp를 만듬
}
}
2.@DataTimeFormat
@initBider보다 간편한 포맷임
@DataTimeFormat을 쓰므로써 @InitBider를 설정안해줘도 됨
@data
public class TodoDTO{
private String title;
@DataTimeFormat(pattern="yyyy/MM/dd")
private Date dueDate;
}
public class SampleController{
@GetMapping("/ex03")
public String ex03 (TodoDTO dto){
log.info("todo: "+dto);
return "ex03"; //이걸가지고 뷰리져브가 jsp를 만듬
}
}
===================================================
Model 이라는 데이터 전달자
request.setAttribute()와 유사한 역할, 데이터를 담아 view에 전달하는역할
@Data
public class SampleDTO{
private String name;
private int age;
}
public class SampleController{
@GetMapping("/ex04")
public void ex04 (SampleDTO dto, @ModelAttribute("page")int page){ //SampleDTO dto는 빈으로 등록이 되어 있고
//int page는 추가된거 ModelAttribute에 담아줘야함
log.info("dto=>"+dto);
log.info("loginfo=>"+page);
}
}
ex04.jsp
<body>
<h2>sampleDTO ${sampleDTO}</h2>
<h2>page ${page}</h2>
</body>
===================================================
@RedirectAttribute
화면에 한번만 전달되는 파라미터를 처리하는 용도
내부적으로 Http
===================================================
Controller의 리턴타입
String jsp를 이용하는 경우 jsp파일의 경로와 파일이름을 나타내기 위해서 시용(분기)
void:호출하는 URL과 동일한 이름의 jsp를 의미
*주소출에 sample/ex05 =>sample은 jsp의 파일경로를 알려주는데, sample폴더안에 있는ex05를 찾아죠
public class SampleController{
@GetMapping("/ex05")
public void ex05(){ //return타입이 void일때
log.info("ex05 거든요"); //ex05 이름만 주면 알아서 찾아감
}
}
public class SampleController{
@GetMapping("/ex02Bean")
public String ex02Bean(SampleDTOList list){ // return타입이 String
log.info("list=>" +list);
return "sample/ex02Bean"; //String으로 줄때는 경로를 줘야한다.
}
}
=======================================================
Controller의 리턴타입 연습하기2
public class SampleController{
@GetMapping("/re1")
public String re1(){
log.info("re1이야....");
return "redirect:/sample/re2" //re2에게 가달라고 키워드(redirect)를 붙여줌
}
@GetMapping("/re2")
public void re2(){
log.info("re2....");
}
}
=======================================================
VO,DTO타입 Json타입으로 처리할수 있다.
public class SampleController{
@GetMapping("/ex06")
public @ResponsBody SampleDTO ex06(){ //SampleDTO 객체를 Json타입으로 바꿔죠
log.info("ex06....");
SampleDTO dto=new SampleDTO();//객체 생성
dto.setName("김자바");
dto.setAge(12);
return dto; //json 타입의 돌려줌
}
}
=======================================================
HttpHeaders의 전달 방법
public class SampleController{
@GetMapping("/ex07")
public ResponsEntity<String> ex07(){ //String으로 Entity를 보내죠
log.info("ex07....");
String msg="{\"name\":\"김자바\"}";
HttpHeaders header =new HttpHeaders();
header.add("Content-type","application/json;charset=UTF-8");
return new ResponsEntity<>(msg,header ,Httpstatus.ok);
}
=======================================================
file 업로드
public class SampleController{
@GetMapping("/exUpload")
public void exUpload(){
log.info("exUpload...................")
}
@PostMapping("/exUploadTest")
public void exUploadTest(ArrayList<MultipartFile> files){
files.forEach(file->{
log.info(".............................");
log.info("name: " +file.getOriginalFilename());
log.info("size " +file.getSize());
log.info("Content-type " +file.getContentType());
});
}
}
exUpload.jsp
<body>
<form action="/sample/exUploadTest" method="post" enctype="multipart/form-data">
<input type="file" name="files">
<input type="submit">
</body>
=======================================================
@ControllerAdvice 예외처리
예외처리와 원래의 컨트롤러가
src/main/java 예외처리패키지 만들기 그안에 예외처리 클래스만들기
@ControllerAdvice
@Log4j
public class CommonExceptionAdvice{
@ExceptionHandler(Exception.class){
public String except(Exception ex, Model model){
log.error("Exception......"+ex.getMassage());
model.addAttribute("exception",ex)
log.error(model);
return "err_page";
}
}
}
err_page.jsp
태그립 상단에 가져오기
<body>
<h4><c:out value="${exception.getMassage()}"></c:out></h4>
<ul>
<c:forEach items="${exception.getStackTrace()}" var="stack">
<li><c:out value="${stack}"></c:out></li>
</c:forEach>
</ul>
</body>
err_page 를 스프링이 인식 할수 있도록 servlet-context.xml에 설정해줘야 인식을 함.
=======================================================
스프링의 404에러 페이지를 다른 에러페이지로 처리 하기위해서는 미리 web.xml에 설정먼저 해줘야함.
@ControllerAdvice
@Log4j
public class CommonExceptionAdvice {
@ExceptionHandler(NoHandlerFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public String handle404(NoHandlerFoundException ex) {
return "custom404";
}
@ExceptionHandler(Exception.class)
public String except(Exception ex, Model model) {
log.error("Exception..." + ex.getMessage());
model.addAttribute("exception", ex);
log.error(model);
return "err_page";
}
}
custom404.jsp
태그립 상단에 가져오기
<body>
<h4>해당 url은 존재하지 않아요</h4>
</body>
=======================================================