반응형

RESTFUL 어노테이션

스프링 3.0 에선 @RESOPONSEBODY , @CONTROLLER 를 각각의 메소드에 써서 리턴타입으로 자원만 줬으나

스프링 4.0 에선 @RESTCONTROLLER 를 클래스에 한번만 기술하면 클래스에 있는 모든 메소드들이 자원전달 가능

주로 ajax 로 url 호출하여 데이터만 받을때 많이 쓴다

컨트롤러

@RestController //리소스 (데이타) 자체를 반환하는데 사용하는 어노테이션이다.(json,xml,문자열) @RequestMapping("/demo") public class DemoController { // <-- 이 클래스에 @RestController 붙임으로써 각 메소드별로 @ResponseBody 를 붙인것과 같은효과 @RequestMapping("hi") public String hi() { // 클래스에 @restController 이 붙으면 리턴값이 뷰리졸버에서 // 뷰의 이름을 찾는거였는데 문자열 그대로 리턴을 하게됨 return "hi!!!!! spring!!!"; } }

pom.xml

<properties> <java-version>1.8</java-version> <org.springframework-version>4.1.7.RELEASE</org.springframework-version> <org.aspectj-version>1.6.10</org.aspectj-version> <org.slf4j-version>1.6.6</org.slf4j-version> </properties>

리턴타입이 문자열일 경우 그냥 문자열이 반환 되서 뿌려주나

리턴 타입이 객체 (VO , Object , map , list 등) 리턴타입이 객체로 될경우 http 에서는 각 객체들이 어떤타입이거 무엇인지 인식을 못하기때 문에

html /http 에서도 인식할수 있는 json 으로 형 변환하여 리턴 해주어야 한다

pom. xml 에 json 라이브러리 사용방법.

pom.xml 디펜던시 추가

<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.6.3</version> </dependency>

컨트롤러

@RestController //리소스(데이타) 자체를 반환하는데 사용하는 어노테이션이다. (JSON, XML, 문자열) @RequestMapping("/demo") public class DemoController { @RequestMapping("/studentInfo") public StudentVO studentInfo(){ //StudentVO 객체를 만들어서 RETURN StudentVO svo = new StudentVO(); svo.setHakbun(1); svo.setName("김말똥"); svo.setGrade(2); return svo; } }

이렇게 Pom.xml 에 jackson 라이브러리를 추가하면 반환되는 객체(vo 를 json으로 변환하여 전달합니다)

반대로 json 객체가 들어오면 그 타입에 맞는 객체로 변환합니다.

이것들이 가능한 이유는 pom.xml에 jackson 라이브러리(json라이브러리) 가 적용되야 가능하다

response header 에는 (공급하는자 헤더에는)



이렇게 타입이 들어가있따

json 라이브러리로 보낼경우엔 저 컨텐트 타입이 application/json 으로 되있다.

content-Type : 문자열 (String) = text/html

collection(map,list ,vo,JSON등) = application / json

rest 방식은 이와같이 별도의 view 를 만들지 않고 데이터만 보냅니다.


반응형
반응형

[HTTP 상태코드]

# 100 번대 상태코드:

100 ----> 데이터의 일부를 서버가 받은 상태(처리중인 상태)

# 200 번대 상태코드 : 정상적인 처리 후 응답

200 ----> OK 에러없이 정상처리

204 ----> 정상처리 되었으나, 서버에 보낼 데이터가 없음

# 300 번대(다른 URL 처리)

301: 요청한 URL이 새로 변경되었음.

304: 기존의 데이터와 변경된것이 없음

# 400번대

400: 요청에 문제가 있기때문에 서버에서 인식할 수 없음

403: 서버에서 허락되지않음

404: 요청 URL을 찾을 수 없음

406: 전송 방식이 허락되지 않음(REST방식에서 자주 나타나는 상태코드)

# 500번대

500: 서버에서 처리시 문제가 발생(프로그램 내부적인 오류)

502: 게이트웨이, 프록시 상태의 문제(과부하)

503: 일시적인 서비스 중단 상태

504: 지정된 처리시간이 지나서 처리되지 못하는 경우


http 에러코드 전달 방법

@RequestMapping("/errorCode") public ResponseEntity<Void> errorCode(){ return new ResponseEntity<>(HttpStatus.BAD_REQUEST); }

상태코드 전달 받는 객체타입 ResponseEntity ( 객체 타입) 입니다.

리턴할때 인자로 HttpStatus.BAD_REQUEST 를 리턴하면 (http 상태 코드를 bad_request로 전달한다는 뜻이다)

뷰로 들어가면 아무것도 안뜨면서 개발자도구의 네트워크탭에 들어가면 에러코드로 400번 에러가 뜬다

*리턴할때 HttpStatus.BAD_REQUEST 가 400에러를 전달 한다는 뜻

@RequestMapping("/errorCodeData") public ResponseEntity<List<StudentVO>> errorCodeData(){ List<StudentVO> slist = new ArrayList<>(); for(int i=0; i<5; i++){ StudentVO svo = new StudentVO(); svo.setHakbun(i+1); svo.setName("이말똥"+(i+1)); svo.setGrade(1); slist.add(svo); } return new ResponseEntity<>(slist, HttpStatus.NOT_FOUND); //리턴타입인 리스트를 맞추고 404 에러코드를 담는다 }

이럴경우 list 데이터를 보내면서 404 에러코드도 같이 보낸다


반응형

+ Recent posts