Spring Boot Web에서 제공되는 기능

이서영·2024년 5월 16일

SpringBoot

목록 보기
1/7

Spring Boot Web에서 제공되는 기능

1) Spring boot Web에서 응답을 만드는 방법

  • String 형태로 function해서 메소드에서 리턴을 하는 경우 - 일반 Text 타입으로 응답이 내려간다
  • Object로 리턴 하는 경우 - 자동으로 Json으로 변환되어 응답, 이때 상대는 항상 200으로 ok
  • ResponseEntity로 리턴하는 경우 - Body의 내용을 Object로 설정 가능, 상황에 따라서 HttpStatus Code 설정 가능
  • ResponseBody로 리턴하는 경우 - RestController가 아닌 곳에서 Json응답을 내릴 때

1-3) Object로 리턴

@Slf4j
@RestController
@RequestMapping("/api/V1")
public class ResponseApiController {
    @GetMapping("")
    public Quet q1(){
        var quet = new Quet();
        quet.setUserName("홍길동");
        quet.setUserPhone("010-2032-3213");
        quet.setUserEmail("lstoddsa@gmail,com");
        log.info("string : {}",quet);
        return quet;
    }
}
  • 이런 식으로 리턴하는 경우가 많았다.
  • 하지만 프로젝트를 진행하다 보면 응답에 대해서 스테이터스 코드를 여러가지로 내려줘야 할 경우가 있다. 하지만 object로 리턴하면 기본적으로 200이 된다 하지만 생성을 할때 201이 될 수도 있고 다른 스테이터스(400에러 500 등 )를 사용하고 싶을 때가 있다. 그때 사용하는 것이 reponseEntity이다

1-2) ResponseEntity로 리턴

  • 필요시 에러코드, body등을 바꿀 수 있다.
  • 해당 로직을 처리하다가 예외가 발생했을 때 응답코드를 내리는 방법
@Slf4j
@RestController
@RequestMapping("/api/V1")
public class ResponseApiController {
    @GetMapping("")
    public ResponseEntity<Quet> q1(){
        var quet = new Quet();
        quet.setUserName("홍길동");
        quet.setUserPhone("010-2032-3213");
        quet.setUserEmail("lstoddsa@gmail,com");
        log.info("string : {}",quet);
        var respone = ResponseEntity        //생성
                .status(HttpStatus.CREATED)   // Http스테이터스 정의
                .header("x-custom","hi") //헤더커스텀
                .body(quet);           // 객체를 넣으면 됨
        return respone;
    }

+)Controller

  • html을 응답값으로 내려줄 수 있다.

  • json으로 반환하려면 @responsebody를 활용

requestMapping

  • path와 메소드를 통해서 어떤 request메소드와 매핑할 지 정한다.

2)Object Mapper(Jackson Library)

  • JSON ---> DTO(역질렬화), DTO ---> Json(직렬화)
  • JSON을 역직렬화를 통해서 DTO형태(자바 클래스)로 바꾸는 역활, 응답을 내릴때 DTO를 내리면 직렬화로 JSON으로 바꿔주는 역활을 하는 것
@SpringBootTest
class RestapiApplicationTests {
	@Autowired  //스프링에서 관리하는 빈들 중 자동으로 사용되는 object mapper를 가져온다는 것
	private ObjectMapper objectmMapper;


	@Test
	void contextLoads() throws JsonProcessingException { // objectmMapper.writeValueAsString(user);을 사용시 예외가 발생할 수도 있다.

		var user = new Quet();
		user.setUserName("hong");
		user.setUserAge(10);
		user.setUserEmail("lsoydsa@gmail.com");
		user.setIskorean(true);
		var json = objectmMapper.writeValueAsString(user); //직렬화는 write사용
		System.out.println(json);
		var dto = objectmMapper.readValue(json,Quet.class);//역직렬회는 read 사용
		System.out.println(dto);
	}
}
  • spring boot에는 기본적으로 objectmapper가 동작하게 된다.

2-1) objectmapper 동작방식

i) write 직렬화

  • object mapper는 직렬화를 할때 변수 기준이 아닌 get이 들어간 메소드들을 참고한다.
  • 간혹가다가 특정 필드를 못찾거나 하는 것들은 해당 클래스에 특정 get 메소드를 만들어 두었기 때문이다.
    • 그때를 대비해서 어노테이션으로 JsonIgnore를 사용
  • 또는 강제로 어노테이션을 통해서 json으로 변환시에는 @JsonProperty("명")을 통해서 변경 가능
    • 변수 선언하는 곳에 붙여야된다.

ii) read 역직렬화

  • 마찬가지로 set이나 get메소드를 기준으로 매핑한다. 하지만 변수명이 같아야 동작한다.

  • 하지만 getter,setter을 사용하지 않으려면 @JsonProperty로 동작가능 하지만 변수가 많으면 말이 안되기 때문에 기본으로 사용하자

profile
전공자 학생

0개의 댓글