수(number): 정수, 실수
문자열(string): 큰 따옴표(")로 구분
배열(Array): 0개 이상의 원소들로 구성된 순서 있는 리스트
객체(Object): 순서가 없는 이름-값 쌍의 집합 (map과 유사)
null: 값이 없음
JSON 예시
{
"user": {
"id": 12345,
"name": "John Doe",
"email": "johndoe@example.com",
"age": 30,
"address": {
"street": "123 Main St",
"city": "Anytown",
"state": "CA",
"postalCode": "12345"
},
"phoneNumbers": [
{"type": "home","number": "555-123-4567"},
{"type": "work","number": "555-987-6543"}
],
"isActive": true,
"roles": [],
"googleId": null,
"createdAt": "2023-01-01T12:00:00Z",
"lastLogin": "2023-06-07T08:45:00Z"
}
}
@RestController
@RequestMapping("/api")
public class MessageController {
@GetMapping("/messages")
public List<Message> getMsgsInJson() {
List<Message> messages = new ArrayList<>();
messages.add(new Message(1, "Hello, World!", "Alice", "2023-06-07T10:00:00Z"));
messages.add(new Message(2, "Spring Boot is awesome!", "Bob", "2023-06-07T10:05:00Z"));
messages.add(new Message(3, "RESTful APIs are powerful.", "Charlie", "2023-06-07T10:10:00Z"));
return messages;
}
}
MappingJackson2HttpMessageConverter
를 이용하여 return 객체를 JSON 데이터로 변환함@RestController
@RequestMapping("/api")
public class MessageController {
private List<Message> messages = new ArrayList<>();
@PostMapping("/messages")
public Message postMsgsInJson(@RequestBody Message message) {
messages.add(message);
return message;
}
}
✅ @ResponseBody(@RestController)가 필요한 이유
메소드의 반환값이 자동으로 JSON 또는 XML 같은 형식으로 직렬화되어 클라이언트에게 전달됨. 이 과정에서 Jackson 라이브러리 등이 사용됨
JSON 변환 제외 처리할 때 @JsonIgnore
이용
날짜 형식 변환 처리할 때 @JsonFormat
이용
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", timezone = "UTC")
private Date timestamp;
‼️ Parameterized URL (Path variable) 사용
Product product = restTemplate.getForObject(
"http://localhost:8080/category/{catId}/product/{prodId}",
Product.class, "c1", "p1");
// URI 변수 값을 설정하는 Map
Map<String, String> uriVariables = new HashMap<>();
uriVariables.put("catId", "c1");
uriVariables.put("prodId", "p1");
// getForObject 메소드 호출
Product product = restTemplate.getForObject(
"http://localhost:8080/category/{catId}/product/{prodId}",
Product.class, uriVariables);