[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にあります.「」を参照してください.
Reference
この問題について([Springboot/SpringBoot]コミュニティ会員入力API), 我々は、より多くの情報をここで見つけました https://velog.io/@jeongyoon05/Springboot스프링부트-Cummunity-회원가입-APIテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol