기록/BACKEND

[Spring] REST API(feat.jackson-databind, json)

5월._. 2022. 4. 28.
728x90

json 라이브러리와 jackson-databind 라이브러리를 이용한 rest api 작성 방법이다. jackson-databind라이브러리는 객체를 JSON포맷의 문자열로 변환시켜서 브라우저로 전송한다. 비슷한 라이브러리로, jackson-dataformat-xml라이브러리는 객체를 xml로 브라우저로 전송한다.

1. pom.xml

라이브러리를 추가한다.

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.13.2.2</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.json/json  : json in java -->
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20220320</version>
</dependency>

 

2. Controller

jackson 사용 X

JSONObject를 생성해서 값을 저장한다.

json.toString을 반환한다.

@GetMapping("/idcheck")
public @ResponseBody String idCheck(@RequestParam("ckid") String checkId) throws Exception {
	int idCount = memberService.idCheck(checkId);
	
	JSONObject json = new JSONObject();
	json.put("idcount", idCount);
	return json.toString();
}

 

jackson 사용 O

1.  컨트롤러의 모든 메서드가 @ResponseBody를 붙인다면 아예 @Controller를 @RestController로 변경한다. 이러면 각 메서드마다 @ResponseBody를 붙이지 않아도 된다.

2.  @CrossOrigin에는 허용하는 uri을 넣는다. 예시처럼 "*"를 넣으면 모든 uri를 허용하는 것이므로 테스트 외에는 추천하지 않는다.

3.  JSONObject로 변경하지 않고 객체 그대로 반환해도 JSON으로 변경된다. 

@RestController
@RequestMapping("/admin")
@CrossOrigin("*")
public class AdminController {
	private static final Logger logger = LoggerFactory.getLogger(AdminController.class);
	
	@Autowired
	private MemberService memberService;

	@RequestMapping(value = "/user", method = RequestMethod.GET, headers = { "Content-type=application/json" })
	public List<MemberDto> userList() throws Exception {
		return memberService.listMember();
	}
}

 

HttpStatus 받기

컨트롤러의 메서드를 실행한 후 응답결과를 같이 반환할 수 있다. ResponseEntity를 이용한다.

아래 코드는 위의 코드들과 동일한 결과를 낸다.

status와 같이 리턴할 객체가 없다면 Void를, 있다면 해당 객체의 타입을 <>에 넣으면 된다.

@GetMapping("/user")
public ResponseEntity<?> userList() throws Exception {
	List<MemberDto> list = memberService.listMember();
	if(list !=null && !list.isEmpty()) {
		return new ResponseEntity<List<MemberDto>>(list,HttpStatus.OK);
	}else {
		return new ResponseEntity<Void>(HttpStatus.NO_CONTENT);
	}
}

만약 오류를 구분한다면 이런식으로 return 값을 설정하는 것도 가능하다.

return new ResponseEntity<String>("500 에러발생",HttpStatus.INTERNAL_SERVER_ERROR);

'기록 > BACKEND' 카테고리의 다른 글

[SpringBoot] JSP사용하기(sts 3)  (0) 2022.05.01
[Spring] REST API  (0) 2022.04.29
[Spring] MyBatis Mapper interface 자동 주입  (0) 2022.04.27
[Spring] MyBatis 설정(feat.Spring)  (0) 2022.04.26
[WEB] MyBatis 설정  (0) 2022.04.25

댓글