Spring Web MVC Post请求多个对象

时间:2016-07-09 01:10:57

标签: java spring spring-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中不是id 15的正确用户名。 同时如果该请求中不存在用户,则返回200(OK) 我的问题是这个,我不想发送用户ID。我只想发送消息和用户名。(FutureMessage对象中有两个以上的属性)

@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或其他任何东西。

2 个答案:

答案 0 :(得分:0)

Spring有一个名为ResponseEntity的参数化对象,您应该从控制器方法返回。它允许您以编程方式根据请求发送不同的HTTP响应。请查看此post,了解在请求错误时返回400响应的示例,以及User为空时的情况。

至于用户XXX与身份15之间的不匹配,我并不完全明白您的问题所在。听起来你只想发送消息和用户名?如果是这种情况,您的存储库需要足够智能以检查用户名,并且用户名最好是唯一的,否则您将发生冲突。

答案 1 :(得分:0)

回应你的第一个问题。即使您返回null,它也将是SUCCESS(状态代码 - 200)http请求。如果您特别想在发现逻辑返回null时将请求作为错误请求发送,则返回

SELECT student.student, 
       course.coursename, 
       course.coursehours, 
       section.day, 
       section.starttime, 
       course.building, 
       location.room 
FROM   student 
       INNER JOIN registration 
               ON student.studentid = registration.sectionid 
       INNER JOIN section 
               ON section.sectionid = registration.sectionid 
       INNER JOIN location 
               ON location.locationid = section.locationid 
       INNER JOIN course 
               ON course.courseid = section.courseid 

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

其次,当您不想发送用户ID时。确保您已在模型(消息,用户)之间配置了正确的关系,并且已将用户Id生成的类型放置到任何Id生成策略(如自动增量

)中