Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 조엘온소프트웨어
- organizeImports
- GlobalInterprintLock
- ProxyServer
- httppretty
- vscode
- maxlinelength
- springboot
- 독후감
- python
- opensouce
- flake8
- Golang
- conf
- Algorithm
- 코로나백신
- restfulapi
- pep8
- Lint
- 규칙없음
- loadimpact
- codewars
- pyenv
- 오큘러스퀘스트2
- 글쓰기가필요하지않은인생은없다
- 유닉스의탄생
- codewar
- typevar
- printer_helper
- goalng
Archives
- Today
- Total
일상적 이야기들.
Java Spring boot 맛보기 본문
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
./gradlw run
과는 다르다.gradle bootRun - standard gradle'run' task with additional Spring Boot features. e.g. you can type: bootRun {addResources = false}check github
gradle run standard gradle 'run' taskPort 변경
resources/application.properties
server.port = 5000
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 를 설계해보자
- https://cheese10yun.github.io/spring-guide-directory/
- Folder Architectur 참고.
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