Resources/static에 있는 html파일
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
main Html String Boot
</body>
</html>
dto/user
package com.example.response.dto;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
// 스네이크 케이스 변수마다 처리하는 것이 아닌 한번에 처리할 때 JsonNaming 사용
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
// 제이슨 규격 정함, NULL 값은 리스폰스가 내려가지 않게 설정하는 어노테이션
@JsonInclude(JsonInclude.Include.NON_NULL)
public class User {
private String name;
// 값이 없을 때 0이 아닌 null을 띄우고자 할 때 Integer
private Integer age;
private String phoneNumber;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//Object Mapper는 get 메서드 참조함
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", phoneNumber='" + phoneNumber + '\'' +
", address='" + address + '\'' +
'}';
}
}
package com.example.response.controller;
import com.example.response.dto.User;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api")
public class ApiController {
// GetMapping으로 넘어온 쿼리 파라미터에 특정한 값을 리턴 시켜 주기 , TEXT내려 주는 경우
@GetMapping("/text")
public String text(@RequestParam String account){
return account;
}
//JSON, 에코 형태
// request오면 -> object Mapper에 의해 -> Object -> method -> object Mapper -> JSON -> response
@PostMapping("/json")
public User json(@RequestBody User user){
return user; // 200 OK
}
// POST는 기존에 없는 것을 생성했을때 201을 Response
// Response를 내려줄때 http status 를 정해주려면 reponse entity 객체를 통해 내려줘야함
// Response 커스터마이징시 주로 사용
@PutMapping("/put")
public ResponseEntity<User> put(@RequestBody User user){
return ResponseEntity.status(HttpStatus.CREATED).body(user);
}
}
package com.example.response.controller;
import com.example.response.dto.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
// html 리턴시 사용, 리소스를 찾게됨
@Controller
public class PageController {
// Controller라는 어노테이션은 스트링을 리턴하면 리소스를 찾게됨
@RequestMapping("/main")
public String main(){
return "main.html";
}
// 1. Response Entity 사용
// 2. ResponseBody 사용
// 이 어노테이션 붙이면 객체 자체를 리턴했을 때 리소스 찾는것이 아닌 바디를 구현해서 내리겠다!
// 거의 사용 X
@ResponseBody
@GetMapping("/user")
public User user(){
var user = new User(); // 타입 추론
user.setName("steve");
user.setAddress("패스트캠퍼스");
return user;
}
}
JSON
:
속성-값 쌍(attribute–value pairs), 배열 자료형(array data types) 또는 기타 모든 시리얼화 가능한 값(serializable value) 또는 "키-값 쌍"으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷
package com.example.objectmapper;
import com.fasterxml.jackson.annotation.JsonProperty;
public class User {
private String name;
private int age;
@JsonProperty("phone_number")
private String phoneNumber;
// 역직렬화 시 이 Default Constructor 참조 -> 없으면 error
public User(){
this.name = null;
this.age = 0;
this.phoneNumber = null;
}
public User(String name, int age, String phoneNumber){
this.name = name;
this.age = age;
this.phoneNumber = phoneNumber;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getPhoneNumber() {
return phoneNumber;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", phoneNumber='" + phoneNumber + '\'' +
'}';
}
}
package com.example.objectmapper;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class ObjectMapperApplicationTests {
@Test
void contextLoads() throws JsonProcessingException {
System.out.println("~~~~~");
// Object Mapper 역할
// Text JSON -> Object, Object -> Text JSON
//controller req Json(text):input -> Object
//response object return -> json(text)
var objectMapper = new ObjectMapper();
// object -> text, ObjectMapper는 get 메서드를 활용!!!!!! set 은 굳이 X
// 클래스 안 다른 메서드를 만들더라도 get을 이름에 붙이면 오류 발생
var user = new User("Steve", 10, "010-1111-2222");
var text = objectMapper.writeValueAsString(user);
System.out.println(text);
// text -> object(역직렬화 겠지?)
// objectMapper는 default 생성자가 있어야 함(오버로딩 하엿을 시)
var objectUser = objectMapper.readValue(text, User.class);
System.out.println(objectUser);
}
}