[Springboot/SpringBoot]コミュニティ会員入力API

6431 ワード

🍃Springbootの起動

안녕하세요🤗

저는 Java Springboot를 처음 시작하는 

초보자들을 위한 커뮤니티 회원가입 API를 만들어 봤습니다.

[#1]プロジェクトの作成


JAvaバージョンは11
TypeはGradleを使用します.

[#1-2]依存性の追加


✅Lombok
✅Spring web
✅MySQL Driver
✅Spring Security
✅Spring Data JPA
詳しい説明は後で皆さんに説明しますので、この依存性を追加することを知っておきましょう.

パッケージの作成[#1-3]


Java包子com.example.Cummunity-apiパッケージの下に、モデル、コントローラ、リポジトリ、サービス、構成、およびロード(Dto)パッケージをそれぞれ作成します.

[#2] yml


アプリケーションはresourcesファイルのサブアイテムにあります.アプリケーション名のプロパティファイル.ymlファイルに置き換えます.
server:
  servlet:
    encoding:
      charset: utf-8
      enabled: true
      force: true
  port: '원하는 포트 번호'

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: 'mysql 사용자 이름'
    password: 'mysql 사용자 비밀번호'
    url: '사용자의 mysql url'

  jpa:
    hibernate:
      ddl-auto: create
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
    show-sql: true

[#3] model

package com.example.community.model;

import lombok.*;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Getter
@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String username;

    private String email;

    private String password;

    private String sex;
}

[#4] payload (Dto)

package com.example.community.payload;

import lombok.*;

@Getter
@NoArgsConstructor
@Builder
@AllArgsConstructor
public class JoinDto{

    private String username;

    private String email;

    private String sex;

    private String password;
}

[#5] controller

package com.example.community.controller;

import com.example.community.model.User;
import com.example.community.payload.JoinDto;
import com.example.community.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RequiredArgsConstructor
@RestController
public class UserController {


    private final UserService userService;

    @PostMapping("/user/join")
    public String join(@RequestBody JoinDto joinDto){
        return userService.join(joinDto);
    }
}

[#6] service

package com.example.community.service;

import com.example.community.model.User;
import com.example.community.payload.JoinDto;
import com.example.community.repository.UserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;

@RequiredArgsConstructor
@Service
public class UserService {

    private final UserRepository userRepository;
    private final BCryptPasswordEncoder bCryptPasswordEncoder;

    public String join(JoinDto joinDto){
        User user = User.builder()
                .email(joinDto.getEmail())
                .username(joinDto.getUsername())
                .password(bCryptPasswordEncoder.encode(joinDto.getPassword()))
                .sex(joinDto.getSex())
                .build();
        userRepository.save(user);
        return "success";
    }
}

[#7] repository

package com.example.community.repository;

import com.example.community.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}

[#8] config

package com.example.community.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

@EnableWebSecurity
@Configuration
public class SecurityConfigure extends WebSecurityConfigurerAdapter{

    @Bean
    public BCryptPasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .csrf().disable()
                .formLogin().disable()
                .httpBasic().disable()
                .logout().disable();
        http
                .authorizeRequests()
                .antMatchers("/user/**").permitAll()
                .anyRequest().authenticated();
    }
}

干渉除去(@)機能

* 🌶 Lombok @
* ☕ javax @
* 🍃 springframework @
97@Entity:エンティティークラスとして指定されたエンティティーテーブルにマッピングします.
🌶 @Getter:privateは外部からアクセスできないため、@Getterはすべてのフィールドに自動的にアクセス者を作成します.
🌶 @ジェネレータ:JPAエンティティオブジェクト@Builder宣言モードを使用します.パラメータが多い場合は、パラメータの順序を考慮せずに簡単に、安全にオブジェクトを作成できます.また、適切な責任を付与することで、可読性を向上させることができる.
🌶 @AllArgConstructor:すべてのフィールド値をパラメータとするジェネレータを作成します.
🌶 @NoArgConstructor:パラメータのないデフォルトジェネレータを作成します.
97@Id:@Id説明Id説明を使用するクラスはId説明クラスです.
97@GeneratedValue:DBのID値が自動的に入力できるパラメータ.
🌶 @RequiredArgsConstructor:初期化されていないfinalフィールドまたは@NonNull付きフィールドのジェネレータを作成します.
🍃 @Repository:Repositoryクラスとして指定された説明
🍃 @bean:開発者が直接制御できない外部ライブラリなどを@beanとして作成しようとすると使用します.
サンプルコードはGithubにあります.「」を参照してください.