스프링 기초

bitna's study note·2022년 6월 30일

스프링

목록 보기
3/54

6월 30일 내용정리

  1. @initBider
    날짜를 변화해주는 역할을 해줌
@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>


=======================================================
profile
좋은개발자가 되기위한 삽질기록 노트

0개의 댓글