//////
Search
📓

10/27 회고록

생성일
2022/10/27 08:55
태그

김기헌

Algorithm - Programmers

import java.util.Arrays; class Solution { public String solution(String[] participant, String[] completion){ String answer=""; Arrays.sort(participant); Arrays.sort(completion); for(int i=0;i< completion.length;i++){ if(!participant[i].equals(completion[i])) return participant[i]; } return participant[participant.length-1]; } }
Java
복사

ReqeuestMapping(Get)

//@RequestMapping(value, method = RequestMethod.GET) = @GetMapping(value) package com.springboot.hello.controller; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api/v1/get-api") public class HelloController { @RequestMapping(value = "/hello", method = RequestMethod.GET) //http://localhost:8080/api/v1/get-api/hello public String hello(){ return "Hello World"; } @GetMapping(value = "/name") public String getName(){ return "kiheon"; } @GetMapping(value = "/variable1/{variable}") public String getVariable1(@PathVariable String variable){ return variable+"hihi"; //페이지에 표시되는 내용 } @GetMapping(value = "/request1") public String getRequestParam1( @RequestParam String name, @RequestParam String email, @RequestParam String organization){ return name + " " + email + " " + organization; } }
Java
복사

Get Mapping + RequestParam

import org.springframework.web.bind.annotation.*; import java.util.Map; @RestController @RequestMapping("/api/v1/get-api") public class HelloController { @@ -26,4 +28,15 @@ public String getRequestParam1( @RequestParam String organization){ return name + " " + email + " " + organization; } @GetMapping(value = "/request2") public String getRequestParam2(@RequestParam Map<String, String> param){ StringBuilder sb = new StringBuilder(); param.entrySet().forEach(map ->{ System.out.printf("key:%s value:%s",map.getKey(),map.getValue()); //sb.append(map.getKey() + " : " + map.getValue() + "\n"); }); //return sb.toString(); return "request2 호출 완료"; }
Java
복사

PostMapping

package com.springboot.hello.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api/v1/post-api") public class PostController { @RequestMapping(value = "/domain", method = RequestMethod.POST) public String postExample() { return "Hello Post API"; } } //Body에서 데이터 이동이 일어난다 @PostMapping(value = "/member") public String postMember(@RequestBody Map<String, Object> postData){ StringBuilder sb = new StringBuilder(); postData.entrySet().forEach(map ->{ sb.append(map.getKey() + " : "+map.getValue()+"\n"); }); return sb.toString(); }
Java
복사

김상호

RestController

@RestController는 @Controller에 @ResponseBody가 추가된 것입니다. RestController의 주 용도는 Json 형태로 객체 데이터를 반환하는 것입니다

Member1

toString 메소드로 인해서 context-type이 text/plain 으로 출력됩니다.

Member2

Member1이 String메소드로 전달받은 값은 ‘text/plain’ 이었지만
Member2는 String 메소드를 사용하지 않았고 @RestController 어노테이션이 지정된 클래스는 @ResponseBody를 생략 가능한데 이 @ResponseBody 어노테이션은 자동으로 값을 JSON과 같은
형식으로 변환해 전달하는 역할을 합니다.

HttpEntity 클래스

Header와 Body로 구성된 HTTP 요청(request)과 응답(response)을 구성하는 역할을 수행

Swagger 설정 하던 과정에서 마주친 오류

설정을 마친후 어플리케이션을 실행했는데 이런 오류가 뜨면서 실행이 중지되었습니다.
지금은 오류 해결이 되어 캡쳐를 하지 못했지만 이 에러는 Unable to start embedded Tomcat 에러였는데 pom.xml에 tomcat dependency를 추가해주고 적용해주었더니 실행이 되었습니다.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </dependency>
JavaScript
복사
Swagger 정상 작동 완료!

이가현

임학준

알고리즘

프로그래머스[완주하지 못한 선수]

DTO

각 클래스 및 인터페이스를 호출하며 메소드의 매개변수에 객체를 사용할수있다
교재에는 setter까지 나와있지만 생성자를 이용하는 추세
public class MemberDto { private String name; private String email; private String organization; public MemberDto(String name, String email, String organization) { this.name = name; this.email = email; this.organization = organization; } public String getName() { return name; } public String getEmail() { return email; } public String getOrganization() { return organization; } @Override public String toString() { return String.format("%s %s %s", this.name, this.email, this.organization); } }
Java
복사
DTO사용으로 코드를 간결화 할수있다
@GetMapping(value = "/request2")//Dto적용전 public String getRequestParam2( @RequestParam String name, @RequestParam String email, @RequestParam String organization) { return name+" "+email+" "+organization; } @GetMapping(value = "/request3")//Dto적용후 public String getRequestParam5(MemberDto memberDto) { return memberDto.toString(); }
Java
복사

POST

데이터베이스에 리소스를 저장(등록) 할때 사용한다
저장하고자 하는 값을 HTTP 바디에 담아 서버에 전달
@RequestMapping(value = "/domain", method = RequestMethod.POST) public String postExample() { return "Hello Post API"; }
Java
복사

PUT

데이터베이스같은 저장소에 존재하는 리소스 값을 업데이트(수정)할때 사용한다
@RequestMapping(value = "/domain", method = RequestMethod.PUT) public String postExample() { return "Hello Post API"; }
Java
복사

RequestEntity

HttpHeader와 Body를 가지고 자체적으로 HttpStatus를 구현한다
HttpStatus는 응답코드 변경 Header Body 구성에 도움을 준다
@PutMapping(value = "/member3")//ResponseEntity는 HttpStatus구현가능 다른메서드도가능 public ResponseEntity<MemberDto> postMemberDto3(@RequestBody MemberDto memberDto) { return ResponseEntity.status(HttpStatus.ACCEPTED).body(memberDto);//응답코드202 //응답코드변경, 헤드와 바디 쉽게 구성 가능 } }
Java
복사
Swagger 생성과정

조국현

최아영

[프로그래머스] 완주하지 못한 선수

문제 설명
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
제한사항
마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
completion의 길이는 participant의 길이보다 1 작습니다.
참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
참가자 중에는 동명이인이 있을 수 있습니다.
class Solution { public String solution(String[] participant, String[] completion) { HashMap<String, Integer> players = new HashMap<>(); String answer = ""; for (String p : participant) { players.put(p, players.getOrDefault(p, 0) + 1); } for (String c : completion) { players.put(c, players.get(c) - 1); } for (String key : players.keySet()) { if (players.get(key) != 0) { answer = key; } } return answer; } }
Java
복사
getOrDefault

GET Method

데이터를 조회할 때 사용한다.
RequestParam을 활용한 GET 메서드
@GetMapping(value = "/request1") public String getRequestParam1(@RequestParam String name, @RequestParam String email, @RequestParam String organization) { return name + " " + email + " " + organization; }
Java
복사
@RequsetParam
Map 객체를 활용한 GET 메서드
@GetMapping(value = "/request2") public String getRequestParam2(@RequestParam Map<String, String> param) { StringBuilder sb = new StringBuilder(); param.entrySet().forEach((map) -> { sb.append(map.getKey() + " : " + map.getValue() + "\n"); }); return sb.toString(); }
Java
복사
DTO 객체를 활용한 GET 메서드
요청 메시지에 들어갈 값이 정해져 있다면 DTO 객체를 매개변수로 삼아 작성할 수 있다.
DTO란?
Data Transfer Object의 약자로 다른 레이어 간의 데이터 교환에 활용된다.
각 클래스 및 인터페이스를 호출하면서 전달하는 매개변수로 사용되는 데이터 객체이다.
public class MemberDto { private String name; private String email; private String organization; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getOrganization() { return organization; } public void setOrganization(String organization) { this.organization = organization; } @Override public String toString() { return "MemberDto{" + "name='" + name + '\'' + ", email='" + email + '\'' + ", organization='" + organization + '\'' + '}'; } }
Java
복사
@GetMapping(value = "/request3") public String getRequestParam3(MemberDto memberDto) { return memberDto.toString(); }
Java
복사

POST Method

데이터를 추가할 때 사용한다.
@RequestMapping으로 구현
@RequestMapping을 사용하는 방법은 GET과 크게 다르지 않다.
@RequestMapping(value = "/hello", method = RequestMethod.POST) public String hello() { return "Hello Post API"; }
Java
복사
@RequestBody를 활용한 POST 메서드
@PostMapping(value = "/member1") public String postMember(@RequestBody Map<String, Object> postData) { StringBuilder sb = new StringBuilder(); postData.entrySet().forEach((map) -> { sb.append(map.getKey() + " : " + map.getValue() + "\n"); }); return sb.toString(); }
Java
복사
@RequestBody
DTO 객체를 활용한 GET 메서드
DTO의 멤버 변수를 요청 메시지의 키와 매핑해 값을 가져온다.
@PostMapping(value = "/member2") public String postMemberDto(@RequestBody MemberDto memberDto) { return memberDto.toString(); }
Java
복사

PUT Method

데이터를 수정할 때 사용한다.
String 타입으로 반환
요청을 보내면 String 타입으로 값을 전달 받게 되면 DTO 객체의 toString 메서드 결괏값이 출력된다.
@PutMapping(value = "/member1") public String postMemberDto1(@RequestBody MemberDto memberDto) { return memberDto.toString(); }
Java
복사
DTO 객체를 반환
Json 형식으로 전달 된다.
@PutMapping(value = "/member2") public MemberDto postMemberDto2(@RequestBody MemberDto memberDto) { return memberDto; }
Java
복사
ResponseEntity를 활용한 PUT 메서드
RequestEntityResponseEntityHttpEntity를 상속받아 구현한 클래스이다.
ResponseEntity는 서버에 들어온 요청에 대해 응답 데이터를 구성해서 전달할 수 있게 한다.
응답 코드 변경은 물론 Header와 Body를 더욱 쉽게 구성할 수 있따.
HttpStatus.ACCEPTED는 응답 코드 202를 가지고 있다.
@PutMapping(value = "/member3") public ResponseEntity<MemberDto> putMembeer(@RequestBody MemberDto memberDto) { return ResponseEntity .status(HttpStatus.ACCEPTED) .body(memberDto); }
Java
복사

Swagger 적용

의존성 추가
POM.XML에 dependency를 추가해준다.
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>3.0.0</version> </dependency>
XML
복사
Configuration 추가
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; @Configuration public class SwaggerConfiguration { @Bean public Docket api() { return new Docket(DocumentationType.OAS_30) .select() .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.any()) .build(); }
Java
복사
Controller 생성
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; public class BasicController { @GetMapping("/api/hello1") public String hello1() { return "hello"; } @GetMapping("/api/hello2") public String hello2(@RequestParam String param) { return param; } }
Java
복사
에러가 나는 경우
application.properties를 application.yml로 변경하여 추가한다.
spring: mvc: pathmatch: matching-strategy: ant_path_matcher
YAML
복사