2016-07-09 11 views
0

Ich habe eine Methode, die ein Objekt einfügt. Aber dieses Objekt wird mit einem anderen Objekt als eins zu vielen zugeordnet.Spring Web MVC Post Anfrage mehrere Objekt

@Entity 
public class FutureMessage { 
    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private int id; 
    private String message; 
    @ManyToOne 
    private User user; 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getMessage() { 
     return message; 
    } 

    public void setMessage(String message) { 
     this.message = message; 
    } 

    public User getUser() { 
     return user; 
    } 

    public void setUser(User user) { 
     this.user = user; 
    } 
} 

Dieses FutureMessage Objekt auf Benutzer-Objekt abgebildet, aber es gibt ein Problem mit Post-Anforderung.

{ 
    "message":"qwerasdf", 
    "user":{"id":15,"username":"XXX"} 
} 

Diese Anfrage gibt 200 aber in der Datenbank XXX ist nicht der richtige Benutzername für id 15. Zur gleichen Zeit, wenn der Benutzer nicht in dieser Anfrage existiert, es gibt 200 (OK) zu.
Mein Problem ist dies, ich möchte keine Benutzer-ID senden. Ich will nur Nachricht und Benutzernamen senden (Es gibt mehr als zwei Attribute in FutureMessage Objekte)

@RequestMapping(path="message/new",method=RequestMethod.POST) 
public FutureMessage newMessage(@RequestBody FutureMessage newMsg){// how to add user name here ? 
    FutureMessage msg = null; 
    if(newMsg==null) 
     return null; 
    if(newMsg.getUser()==null){ 
     return null; 
    } 
    try{ 
     msg = messageRepository.save(newMsg); 
    }catch(Exception ex){ 
     ex.printStackTrace(); 
    } 

    return msg; 
} 

EDIT:. Ich möchte nur FutureMessage Objekt und den Benutzernamen als Response senden. Das ist meine Frage, die 404 oder irgendetwas anderes nicht zurückgibt.

Antwort

0

Spring hat das Objekt ResponseEntity parametrisiert, das Sie von Ihren Controller-Methoden zurückgeben sollten. Es ermöglicht Ihnen, programmgesteuert verschiedene HTTP-Antworten basierend auf der Anforderung zu senden. Schauen Sie sich post für ein Beispiel für die Rückgabe einer 400-Antwort, wenn die Anfrage schlecht ist, in Ihrem Fall, wenn die User Null ist.

Wie für den Unterschied zwischen Benutzer XXX und ID 15 Ich verstehe nicht vollständig, was Ihr Problem ist. Es klingt wie Sie nur die Nachricht und den Benutzernamen senden möchten? Wenn dies der Fall ist, muss Ihr Repository intelligent genug sein, um den Benutzernamen zu überprüfen, und die Benutzernamen sollten besser eindeutig sein oder Sie werden Kollisionen bekommen.

0

Reagieren auf Ihr erstes Problem. Auch wenn Sie null zurückgeben, wird die Anforderung "SUCCESS (Statuscode - 200) http" angezeigt. Wenn Sie speziell die Anfrage so schlecht Anfrage senden möchten, wenn Sie finden Ihre Logik null zurückgibt, dann wieder wie

return new ResponseEntity<String>(HttpStatus.BAD_REQUEST); 

How to respond with HTTP 400 error in a Spring MVC @ResponseBody method returning String?

Zweitens, wenn Sie nicht über die Benutzer-ID senden möchten. Stellen Sie sicher, dass Sie die korrekte Beziehung zwischen Ihren Modellen (Nachricht, Benutzer) konfiguriert haben und dass Sie den generierten Typ der Benutzer-ID an eine beliebige Ihrer ID-Generierungsstrategie, z. B. automatisches Inkrement

, platziert haben
Verwandte Themen