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 |
댓글