2016-07-09 91 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生成策略中,例如自动增量