일상적 이야기들.

Java Spring boot 맛보기 본문

프로그래밍

Java Spring boot 맛보기

noveljava 2021. 8. 28. 14:28

IntelliJ 로 시작하기.

2021.01 버전의 IntelliJ

  • File → New → Project...
  • Spring Initializer를 통해서, 프로젝트를 생성한다. 이는 Spring Boot에서 제공하는 기능과 동일하다.

  • 갖가지 필요한 기능들에 대해서 체크를 하고 Finish를 누르면 프로젝트가 생성이 된다.

Application.java

package com.example.spring_boot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}
  • 보잘 것 없이 튀어나온 소스코드 하나.

Run

프로젝트를 빌드하자.

$ ./gradlew build

프로젝트를 실행하자.

$ ./gradlew bootrun

Sample Code

package com.example.spring_boot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

Application.java

package com.example.spring_boot;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class AppRunner {
    @GetMapping("/test")
    public String index() {
        return "hello World!";
    }
}

AppRunner.java

  • Annotation으로, Compile하면서 지들이 알아서 Mapping 시켜주나보다.
  • AppRunner에 대해서, 별도로 Main에게 알려주지 않았는데, 알아서 해석해서 Mapping시켜준다.
    • 이런 점은, Vert.x 보다 편리함.

Restful API 를 설계해보자

Get Parameter 받기

Lombok 을 이용하여 받기

package com.example.spring_boot;

import lombok.*;

@Data
public class ParameterTest {
    private int age;
}

Lombok으로 parameter를 받을 Class를 생성한다. Null로 받을 수 있게끔 처리가 되어있어야한다. 그렇지 않을 시에 Parameter가 전달되지 않을 시에 에러가 발생한다.

package com.example.spring_boot;

import com.example.spring_boot.core.YsTest;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;

@RequestMapping("/test")
@RestController
public class AppRunner {
    @GetMapping("/test")
    public String index(HttpServletRequest request){
        String age = request.getParameter("age");

        System.out.println("Age......" + age);
        YsTest test = new YsTest();
        String retVal = test.test();
        System.out.println(retVal);
        return "hello World!";
    }

    @GetMapping("/test2")
    public String index2(ParameterTest param) {
        System.out.println("Age is .... " + param.getAge());
        return "hello World! 2";
    }

}

HttpServletRequest를 통해서 받는 방법과, Lombok으로 받는 방법에 대한 2가지 예제

RestController가 중요한 것. ( 없으면 Restful 로 mapping이 되지 않음 )

Post Body 받기

package com.example.spring_boot;

import com.example.spring_boot.core.YsTest;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;

@RequestMapping("/test")
@RestController
public class AppRunner {
    @GetMapping("/test")
    public String test(HttpServletRequest request){
        String age = request.getParameter("age");

        System.out.println("Age......" + age);
        YsTest test = new YsTest();
        String retVal = test.test();
        System.out.println(retVal);
        return "hello World!";
    }

    @GetMapping("/test2")
    public String test2(ParameterTest param) {
        System.out.println("Age is .... " + param.getAge());
        return "hello World! 2";
    }

    @PostMapping("/posttest")
    public String postTest(@RequestBody ParameterTest param) {
        System.out.println("Age is..... " + param.getAge());
        return "Test";
    }
}
  • @RequestBody를 통해서 받게 될 시에, 알아서 Mapping 해준다.

주의

보내는쪽에서, 빈 JSON 구조라도 보내줘야한다. 안 그러면 에러가 발생한다.

WARN 93025 --- [p-nio-80-exec-3] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing:

Return JSON

Return될 시에 Key, Value 형태로 표현이 되면 JSON 구조로 알아서 바꿔주는 것 같다. Class 객체 변수를 던져도 괜찮고, HashMap을 던져도 알아서 이쁘게 만들어준다.

package com.example.spring_boot;

import com.example.spring_boot.core.YsTest;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;

@RequestMapping("/test")
@RestController
public class AppRunner {
    @GetMapping("/test")
    public String test(HttpServletRequest request){
        String age = request.getParameter("age");

        System.out.println("Age......" + age);
        YsTest test = new YsTest();
        String retVal = test.test();
        System.out.println(retVal);
        return "hello World!";
    }

    @GetMapping("/test2")
    public String test2(ParameterTest param) {
        System.out.println("Age is .... " + param.getAge());
        return "hello World! 2";
    }

    @PostMapping("/posttest")
    public HashMap<String, Object> postTest(@RequestBody ParameterTest param) {
        System.out.println("Age is..... " + param.getAge());
        HashMap<String, Object> retVal = new HashMap<String, Object>();
        retVal.put("Test", "Test");
        retVal.put("Age", param.getAge()+20);
        return retVal;
    }
}

'프로그래밍' 카테고리의 다른 글

[TIL] Proxy Server...?  (0) 2020.11.13
Comments