코딩, 개발에 대한 기록 저장소
레이블이 Java인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Java인 게시물을 표시합니다. 모든 게시물 표시

spring helloworld for restful api

[Spring] RestFull API를 사용한 Helloworld

Spring으로 hello world RESTful 웹서비스를 만드는 과정을 정리함.

설치

JDK 설치

자기 시스템환경에 맞는 JDK 설치
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

  • 환경변수에 JAVA_HOME 추가
    JAVA_HOME : c:\Program Files\Java\jdk1.8.0_121
  • path에 %JAVA_HOME%\bin 추가

Spring Tool Suite

  1. Spring tool 다운로드
    http://spring.io/tools
  2. spring-tool-suite-3.8.3.RELEASE-e4.6.2-win32.zip 압축을 적당한 경로에 푼다
  3. sts-bundle\sts-3.8.3.RELEASE\sts.exe 실행

코드 작성

프로젝트 생성

  1. package explorer 위에서 우클릭하여 New > Spring starter Project 클릭
  2. 프로젝트 정보 입력(본 포스트 소스를 그대로 사용하려면 Demo로 입력된 부분을 hello로 변경)
  3. New Spring Starter Project Dependencies 에서 Web > Web 체크
  4. Finish

resource representation class 생성

Greeting.java

package hello;

public class Greeting {
    private final long id;
    private final String content;
    public Greeting(long id, String content) {
        this.id = id;
        this.content = content;
    }
    public long getId() {
        return id;
    }
    public String getContent() {
        return content;
    }
}

resource controller 생성

GreetingController.java

package hello;

import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GreetingController {
    private static final String template = "Hello, %s!";
    private final AtomicLong counter = new AtomicLong();
    @RequestMapping("/greeting")
    public Greeting greeting(@RequestParam(value="name", required=false, defaultValue="World") String name) {
        return new Greeting(counter.incrementAndGet(),
                            String.format(template, name));
    }
}

Application 실행부분은 자동 작성된 내용 그대로 사용

HelloApplication.java

package hello;

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

@SpringBootApplication
public class HelloApplication {

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

테스트

  1. 프로젝트에서 오른쪽 마우스 버튼 클릭
  2. Run As > Spring Boot App 실행
  3. 서버가 띄워지면 http://localhost:8080/greeting 에 접속하여 확인

참고 사이트

스프링 사이트의 예제 문서를 참고하였으며 원문은 아래와 같음

https://spring.io/guides/gs/rest-service/



Java warning, Java 컴파일 경고 처리 옵션

Java warning, Java 컴파일 경고 처리 옵션

SuppressWarnings 사용

SuppressWarning 어노테이션을 사용하여 컴파일 단위의 서브세트와 관련된 컴파일 경고를 사용하지 않도록 설정할 수 있음

한 개일때

@SuppressWarnings("cast")

두 개일때

@SuppressWarnings({"cast", "unchecked"})

SuppressWarnings의 지원되는 값

  • all : 모든 경고
  • cast : 캐스트 연산자 관련 경고
  • dep-ann : 사용하지 말아야 할 주석 관련 경고
  • deprecation : 사용하지 말아야 할 메소드 관련 경고
  • fallthrough : switch문에서의 break 누락 관련 경고
  • finally : 반환하지 않는 finally 블럭 관련 경고
  • null : null 분석 관련 경고
  • rawtypes : 제네릭을 사용하는 클래스 매개 변수가 불특정일 때의 경고
  • unchecked : 검증되지 않은 연산자 관련 경고
  • unused : 사용하지 않는 코드 관련 경고
  • incomplete-switch : switch문 case에 누락 관련 경고
  • boxing boxing/unboxing : 오퍼레이션과 관련된 경고
  • hiding : 변수를 숨기는 로컬과 관련된 경고
  • javadoc : javadoc 경고와 관련된 경고
  • sync-override : 동기화된 메소드를 오버라이드하는 경우 누락된 동기화로 인한 경고


JAVA DuplicateKeyException (DB 무결성 제약 조건에 위배)

DB에 Primary Key로 설정되어 있는 속성이 중복될 경우 발생하는 에러

Primary Key로 설정된 속성이 중복된 데이터를 DB에 삽입하려 하면 다음과 같은 에러가 발생한다:

java.lang.Object
 java.lang.Throwable
  java.lang.Exception
   java.lang.RuntimeException
    org.springframework.core.NestedRuntimeException
     org.springframework.dao.DataAccessException
      org.springframework.dao.NonTransientDataAccessException
       org.springframework.dao.DataIntegrityViolationException
        org.springframework.dao.DuplicateKeyException

이는 관계형 데이터베이스에서 기본키(Primary Key) 제약조건을 위반한 경우 발생하는 예외이다. 테이블 행의 무결성을 유지하기 위한 보호 장치라 할 수 있다.

이 에러가 발생했다면 DB 로그를 확인하여 기본키가 겹치는 입력이 있었는지 파악해야 한다.