2016-07-09 131 views
0

我有一個插入對象的方法。但是這個對象與另一個對象映射爲一對多。Spring Web MVC Post請求多個對象

@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不是ID 15. 在同一時間出現在正確的用戶名,如果用戶沒有在這個請求存在,則返回200(OK)太多。
我的問題是這個,我不想發送用戶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; 
} 

編輯:我只想發送FutureMessage對象和用戶名作爲ResponseBody。這是我的問題沒有返回404或其他任何東西。

回答

0

Spring的參數化對象名爲ResponseEntity,您應該從控制器方法返回。它允許您以編程方式發送基於請求的不同HTTP響應。看看這個post的一個例子,當請求不好時返回400響應,在User爲空的情況下。

至於用戶XXX和ID 15之間的不匹配我不完全明白你的問題是什麼。這聽起來像你只是想發送消息和用戶名?如果情況是這樣的話,您的存儲庫需要足夠聰明以檢查用戶名,並且用戶名最好是唯一的,否則會發生衝突。

0

迴應你的第一個問題。即使你返回null,它也會是SUCCESS(狀態碼 - 200)http請求。如果你特別希望發送請求爲錯誤的請求,當你發現你的邏輯返回null,則返回像

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

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

其次,當你不想要發送的用戶ID。確保您已配置模型(消息,用戶)之間的正確關係,並且您已將用戶標識的生成類型置於您的任何Id生成策略中,例如自動增量