我有一个插入对象的方法。但是这个对象与另一个对象映射为一对多。
@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或其他任何东西。
答案 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生成策略(如自动增量
)中