0

DBに何かを投稿しようとしているときに@RestControllerを使用していくつかの問題が発生しました。 (ポストマンを使用して):「ポート/ポストlocalhost」を:で、このような何かを掲示しながら、スプリングレストコントローラの使用

{ 

    "postID": "5", 

    "content": "testcontent", 

    "time": "13.00", 

    "gender": "Man" 

} 

:私の目標は、このようになり、結果を取得しようとすることです

{ 

    "content": "testcontent", 

    "time": "13.00", 

    "gender": "Man" 
} 

Post.java

package bananabackend; 

public class Post { 

private final long id; 
private String content; 
private String time; 
private String gender; 


// Constructor 

public Post(long id, String content, String time, String gender) { 
    this.id = id; 
    this.content = content; 
    this.time = time; 
    this.gender = gender; 
} 

// Getters 

public String getContent() { 
    return content; 
} 

public long getId() { 
    return id; 
} 

public String getTime() { 
    return time; 
} 

public String getGender() { 
    return gender; 
} 

PostController.java

package bananabackend; 

import java.util.List; 


import org.springframework.data.mongodb.repository.MongoRepository; 
import org.springframework.data.repository.query.Param; 
import org.springframework.data.rest.core.annotation.RepositoryRestResource; 

@RepositoryRestResource(collectionResourceRel = "posts", path = "posts") 
public interface PostRepository extends MongoRepository<Post, String> { 


List<Post> findPostByContent(@Param("content") String content); 

} 

package bananabackend; 

import java.util.concurrent.atomic.AtomicLong; 

import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RequestParam; 
import org.springframework.web.bind.annotation.RestController; 

import bananabackend.Post; 


@RestController 
public class PostController {  

private final AtomicLong counter = new AtomicLong(); 

@RequestMapping(value="/posts", method = RequestMethod.POST) 
public Post postInsert(@RequestParam String content, @RequestParam String time, @RequestParam String gender) { 
    return new Post(counter.incrementAndGet(), content, time, gender); 
    } 
} 

PostRepository.javaは、私はこのエラーを取得する:

{ 

    "timestamp": 1460717792270, 

    "status": 400, 

    "error": "Bad Request", 

    "exception": 
    "org.springframework.web.bind.MissingServletRequestParameterException", 

    "message": "Required String parameter 'content' is not present", 

    "path": "/posts" 
} 

私が作ったすべての投稿にIDを設定したいが、動作するようには思えません。私は、このガイドに似た私のコードをビルドしようとしていた。

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

+0

さて、いくつかのRequestParamsを指定して、何も送信しないでください。すべてのオブジェクトをオブジェクトの中に入れ、コントローラ上で '@RequestBody NewObj obj'を使うべきです。 – dambros

答えて

1

あなたがそれらをリクエストボディで送信され、リクエストパラメータを取得しようとしています。リクエストパラメータは、URLで送信するパラメータです。

代わりのような@RequestParam ...使用@RequestBody Post post使用:

@RequestMapping(value="/posts", method = RequestMethod.POST) 
public Post postInsert(@RequestBody Post post) { 
    return new Post(counter.incrementAndGet(), post.getContent(), post.getTime(), post.getGender()); 
} 

をまた、あなたはPostクラスのデフォルトコンストラクタが必要です。

+0

私はこのように書こうとしました: 返信新しいポスト(counter.incrementAndGet()、post.getContent()、post.getTime()、post.getGender()); [simple type、class bananabackend.Post]のタイプに適したコンストラクタが見つかりませんでした:JSONオブジェクトからインスタンス化できません(既定のコンストラクタまたは作成者がないか、または追加/有効化が必要な可能性があります)型情報? Post.javaにあるので、変数を認識できないので、取得しようとしました。 – BananaBackend

+0

コードを編集しました。また、インスタンスを作成するためにPostクラスのデフォルトのコンストラクタも必要です – ykaragol

+1

作品は本当にありがとう! – BananaBackend

関連する問題