Java Spring Boot 002-3 | Controller, RestController

Yunny.Log ·2022년 2월 9일
1

Spring Boot

목록 보기
12/80
post-thumbnail

3. Controller, RestController

package com.example.demo;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/rest")
public class SimpleRestController {
    private static final Logger logger = LoggerFactory.getLogger(SimpleRestController.class);

    @GetMapping("/simple-payload")
    public SimplePayload simplePayload(){
        return new SimplePayload("custard", 23,"Developer");
    }
}
  • Response Body를 붙이지 않아도 잘 작동한다.

@RestController 를 붙이게 되면

  • @Controller는 기본적으로 뷰를 제공, 데이터를 제공하는 넓은 범위의 annotation
  • @RestController는 기본적으로 데이터를 주고받는 역할을 수행

media 파일 경로

    @GetMapping(
            value = "/simple-image",
            produces = MediaType.IMAGE_PNG_VALUE
    )
    public byte[] simpleImage() throws IOException {
        InputStream inputStream = getClass().getResourceAsStream("");//name에 해당하는 애는 resource 폴더 안에 있을 걸
        //inputStream = new FileInputStream(new File("파일위치지정"));fileinputstream에 지정
        return inputStream.readAllBytes();
    }
  • 비디오나 이미지나 모두 바이트들로 이루어져있다!

  • 이미지를 추가하고 실제 이 이미지를 불러오도록 코드를 작성

    @GetMapping(
            value = "/simple-image",
            produces = MediaType.IMAGE_PNG_VALUE
    )

    public byte[] simpleImage() throws IOException {
        InputStream inputStream = getClass().getResourceAsStream("/static/img.png");//name에 해당하는 애는 resource 폴더 안에 있을 걸

        return inputStream.readAllBytes();
    }
  • 항상 경로는 상대 경로로
    getClass().getResourceAsStream("static/img.png"); 이렇게 하면 절대 경로잖아~null로 인식된다.


Controller , RestController

1) Controller Annotation

@Controller
public class SampleController{
}
  • 요청 경로 설정을 위해 Controller Annotation 사용
@RequestMapping("/profile") //경로 지정(http://localhost:8080/profile)
public String profile(){
	logger.info("in profile"); //위의 경로로 로그에 이거 찍어라
    return "profile.html") // profile.html 보여줘라
}
  • RequestMapping을 이용해 경로에 따라 실행될 함수 지정 가능
@RequestMapping("/profile") //경로 지정 (http://localhost:8080/profile)
public String profile(){
	logger.info("in profile"); //위의 경로로 로그에 이거 찍어라
    return "profile.html") // profile.html 보여줘라
}
  • REQUEST가 GET으로 정해진 GetMapping 어노테이션도 가능
  • 메소드 별로 별도의 Annotation이 존재한다
@GetMapping(
	value = "/sample-payload",
    produces = MediaType.APPLICATION_JSON_VALUE
    )
public @ResponseBody SamplePayloag samplePayload(){
	return new SamplePayload(
  • HTML 외에 데이터 전송을 위해 Body, MediaType 지정 가능
@GetMapping(
	value = "sample-image",
    produces = MediaType.IMAGE_PNG_VALUE
)
public byte[] sampleImage() throws IOException{
  • 어떤 형태의 응답이든 데이터의 일종임

0개의 댓글