Spring Bootを使用してSNSのようなアプリの開発を進めています。
POSTで値を入れてと送信すると、DBに登録されるAPI作成について取り組んでいるのですが、
ユーザーが新規登録した時間をフィールド変数に入れる方法とpostで送信するときのJsonの指定方法が分かりません。
下記はコードです。
UserServiseクラス
Java
1//パッケージ省略 2import java.util.List; 3import javax.transaction.Transactional; 4import org.springframework.beans.factory.annotation.Autowired; 5import org.springframework.stereotype.Service; 6@Service 7@Transactional 8public class UserServise { 9 @Autowired 10 UserRepository userRepository; 11 12 public List<User> getUsers(){ 13 return userRepository.findAll(); 14 } 15 16 public User postUser(User user) { 17 UserInput userInput = new UserInput(); 18 User u= new User(); 19 u.setCreated_at(userInput.getTimestampCreated_at()); 20 return userRepository.save(user); 21 } 22} 23
UserControllerクラス
Java
1//パッケージ省略 2import java.util.List; 3import org.springframework.beans.factory.annotation.Autowired; 4import org.springframework.web.bind.annotation.GetMapping; 5import org.springframework.web.bind.annotation.PostMapping; 6import org.springframework.web.bind.annotation.RequestBody; 7import org.springframework.web.bind.annotation.RequestMapping; 8import org.springframework.web.bind.annotation.RestController; 9 10@RestController() 11@RequestMapping("/xxxxx") 12public class UserController { 13 @Autowired 14 UserServise userServise; 15 16 @GetMapping 17 List<User> getUsers(){ 18 return userServise.getUsers(); 19 } 20 @PostMapping 21 User postUser(@RequestBody User user) { 22 return userServise.postUser(user); 23 } 24}
UserRepositoryクラス
Java
1//パッケージ省略 2import org.springframework.data.jpa.repository.JpaRepository; 3public interface UserRepository extends JpaRepository<User, Integer>{ 4}
Userクラス
Java
1//パッケージ省略 2import java.sql.Date; 3import java.sql.Timestamp; 4import javax.persistence.Column; 5import javax.persistence.Entity; 6import javax.persistence.GeneratedValue; 7import javax.persistence.GenerationType; 8import javax.persistence.Id; 9import javax.persistence.Table; 10import lombok.AllArgsConstructor; 11import lombok.Data; 12import lombok.NoArgsConstructor; 13 14@Entity 15@Data 16@NoArgsConstructor 17@AllArgsConstructor 18@Table(name = "Users") 19public class User { 20 21 @Id 22 @GeneratedValue(strategy = GenerationType.IDENTITY) 23 @Column(nullable = false) 24 private int user_id; 25 26 @Column(length = 200,nullable = false) 27 private String email; 28 29 @Column(length = 100,nullable = false) 30 private String name; 31 32 @Column(length = 100) 33 private String self_introduction; 34 35 @Column(length = 2055) 36 private String profile_picture; 37 38 @Column(nullable = false) 39 private Timestamp created_at; 40 41 42
UserInputクラス
Java
1import java.sql.Timestamp; 2 3public class UserInput { 4 5 private Timestamp timestampCreated_at = new Timestamp(System.currentTimeMillis()); 6 7 public Timestamp getTimestampCreated_at() { 8 return timestampCreated_at; 9 } 10}
APIの確認方法についてはAdvanced REST clientを使用しています。
①created_atにはapiを叩いた時間を入れたいです。そのためPOSTで送信する際に、値をこちらで入力するのではなく、時刻の変数をUserクラスのsetCreated_atで指定してしまえばいいと考えました。そのため、TimeStampのインスタンスを作成し現時刻を変数にいれ、それを代入する処理しています。(serviseクラスとInputUserクラス) この方法ではいまのところうまくいきません。もしかすると後述する②が原因でそもそも動かない気がしますが、この時点で間違いがあればご指摘いただきたいです。
②全てがこちら側で入力して済むときは下記のようにPOSTメソッドで送れば済みます。(Advanced REST clientでPOST送信するときのJsonのコード)
Json
1{ 2 "user_id":1, 3 "email":"posttest", 4 "name":"namae", 5 "self_introduction":"hello", 6 "profile_picture":"picturepicture", 7 "created_at":"2017-07-01T14:59:55.711Z" 8 9}
しかし、created_atは既値が叩いた状態で入っている想定です。この場合ここでの指定方法が分かりません。updated_atの行を消したり、値が入っている部分を空欄にしたりしましたが、うまくいきません。ご教授いただければ幸いです。
created_at関連での現時刻でのインスタンス作成をせずに、上記のような具体的な値を入れたらしっかりPOSTはできましたので、記述した中で間違いがあると考えられます。
何卒よろしくお願い申し上げます。
あなたの回答
tips
プレビュー