0

Ich habe Probleme mit @RestController beim Versuch, etwas in meiner DB zu veröffentlichen. Mein Ziel ist es, zu versuchen, ein Ergebnis zu erhalten, die wie folgt aussieht:Verwendung der Federhalteregler

{ 

    "postID": "5", 

    "content": "testcontent", 

    "time": "13.00", 

    "gender": "Man" 

} 

während Posting etwas wie dies in "localhost: port/posts" (mit Postman):

{ 

    "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.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

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); 

} 

ich diesen Fehler:

{ 

    "timestamp": 1460717792270, 

    "status": 400, 

    "error": "Bad Request", 

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

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

    "path": "/posts" 
} 

Ich möchte jedem Beitrag eine ID festgelegt gemacht, aber es scheint nicht zu funktionieren. Ich habe versucht, meinen Code ähnlich wie diese Anleitung zu bauen:

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

+0

Nun, Sie spezifizieren mehrere RequestParams und senden keine. Sie sollten alles in ein Objekt einfügen und stattdessen '@RequestBody NewObj obj' auf Ihrem Controller verwenden. – dambros

Antwort

1

Sie versuchen Anfrage zu erhalten Parameter diejenigen sind in Anforderungstext gesendet. Anforderungsparameter sind die Parameter, die Sie in URL senden.

Statt @RequestParam ... Verwendung @RequestBody Post post verwenden wie:

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

auch Sie einen Standardkonstruktor in Post Klasse benötigen.

+0

Ich habe versucht, es so zu schreiben: geben Sie neuen Beitrag zurück (counter.incrementAndGet(), post.getContent(), post.getTime(), post.getGender()); ich diese: Dokument kann nicht lesen: Nein geeignet Konstruktor für Typen [einfache Art, Klasse bananabackend.Post] gefunden: kann nicht instanziiert von JSON-Objekt (fehlende Standardkonstruktors oder Schöpfer, oder vielleicht muß hinzufügen/enable type information? Wenn ich es einfach so schreibe wie du, werden die Variablen nicht erkannt, da sie in Post.java sind, also habe ich versucht, sie zu bekommen. – BananaBackend

+0

Editiert den Code. Auch benötigen Sie einen Standardkonstruktor in Post-Klasse, um die Instanz zu erstellen – ykaragol

+1

Funktioniert jetzt vielen Dank! – BananaBackend

Verwandte Themen