2016-07-09 20 views
0

私はオブジェクトを挿入するメソッドを持っています。しかし、このオブジェクトは1対1として別のオブジェクトとマッピングされました。Spring Web MVC複数のオブジェクトをリクエスト投稿

@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; 
    } 
} 

このFutureMessageオブジェクトはUserオブジェクトにマップされていますが、ポストリクエストに問題があります。

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

この要求には、200を返しますが、データベースXXXに、ユーザがこの要求に存在していない場合、それはあまりにも(OK)200を返すと同時にID 15 のための正しいユーザー名ではありません。
私の問題はこれです、私はユーザーIDを送信したくありません。私はちょうどメッセージとユーザ名を送信する(FutureMessageオブジェクト内の2つの以上の属性があります)

@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:は、私が唯一ResponseBodyとしてFutureMessageオブジェクトとユーザ名を送りたいです。これは私の質問ではない404または何かを返すことです。

答えて

0

スプリングにはコントローラメソッドから返す必要があるResponseEntityという名前のオブジェクトがパラメータ化されています。これにより、要求に基づいて異なるHTTP応答をプログラムで送信することができます。 Userがヌルの場合は、要求が悪いときに400応答を返す例については、このpostを見てください。

ユーザXXXとid 15の間の不一致については、あなたの問題が完全に理解されていません。メッセージとユーザー名を送信するだけのようですね。そうであれば、あなたのリポジトリはユーザ名を確認するのに十分スマートでなければならず、ユーザ名はより一意にするか、衝突するでしょう。

0

最初の問題に対応します。 nullを返すにしても、それはSUCCESS(ステータスコード - 200)http要求です。あなたのロジックはnullを返したときにあなたが見つけるあなたが特に悪い要求として要求を送信したい場合は、ユーザーIDを送信したくない場合は、その後、

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

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

のようなセカンドを返します。あなたのモデル(メッセージ、ユーザー)間の正しい関係を設定し、あなたが生成したユーザーIDを自動インクリメントなどのId生成戦略に配置したことを確認してください

関連する問題