Java 如何在postman中传递类对象?
我不熟悉spring和hibernate,我已经创建了一个SpringMVC应用程序。我遇到的问题是我的预订实体。当我在postman中从ReservationController调用add函数时,我收到一个400错误的请求,服务器无法或不会处理该请求,原因是被认为是客户端错误(例如,格式错误的请求语法、无效的请求消息帧或欺骗性的请求路由)。我相信这是因为hostId和guestId是一种用户类型,因为我的usercontroller.java的add方法工作得很好,但我不能100%确定这是一个问题。如果有人知道如何解决这个问题,请帮助 我试着通过邮递员传递信息,如下所示:Java 如何在postman中传递类对象?,java,spring,hibernate,jpa,postman,Java,Spring,Hibernate,Jpa,Postman,我不熟悉spring和hibernate,我已经创建了一个SpringMVC应用程序。我遇到的问题是我的预订实体。当我在postman中从ReservationController调用add函数时,我收到一个400错误的请求,服务器无法或不会处理该请求,原因是被认为是客户端错误(例如,格式错误的请求语法、无效的请求消息帧或欺骗性的请求路由)。我相信这是因为hostId和guestId是一种用户类型,因为我的usercontroller.java的add方法工作得很好,但我不能100%确定这是一个
{
"confirmation": 4488,
"guestId": "userId": 44,
"hostId": "userId": 45,
"checkInDate": "8/27/2019",
"checkOutDate": "8/31/2019",
"city": "Las Vegas",
"state": "NV"
}
也像:
{
"confirmation": 4488,
"guestId": [
"userId": 44,
"username": "username",
"password": "password",
"firstName": "name",
"lastName": "lastname",
"ssid": "WiFi",
"ssidPassword": "password!"],
"hostId": [
"userId": 45,
"username": "user2",
"password": "password",
"firstName": "name2",
"lastName": "lastname2",
"ssid": "Red",
"ssidPassword": "red$1"],
"checkInDate": "8/27/2019",
"checkOutDate": "8/31/2019",
"city": "Las Vegas",
"state": "NV"
}
但这两种方法都不奏效
User.java
@Entity
@Table(name="User", schema="DB", uniqueConstraints = {@UniqueConstraint(columnNames= "Username")})
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="User_Id")
private Integer userId;
@Column(name="Username", unique=true)
private String username;
@Column(name="Password")
private String password;
@Column(name="First_Name")
private String firstName;
@Column(name="Last_Name")
private String lastName;
@Column(name="SSID")
private String ssid;
@Column(name="SSID_Password")
private String ssidPassword;
@OneToMany(mappedBy = "guestId", fetch = FetchType.EAGER)
private Set<Reservation> guestReservations = new HashSet<>();
@OneToMany(mappedBy= "hostId", fetch = FetchType.EAGER)
private Set<Reservation> hostReservations = new HashSet<>();
...
ReservationRepository.java
@Transactional
@EnableTransactionManagement
@Repository
public class ReservationRepository {
@Autowired
SessionFactory sf;
//Creates a new reservation
public String add(Reservation res) {
Session s = sf.getCurrentSession();
s.persist(res);
return "Reservation Requested";
}
public List<Reservation> selectAll(){
List<Reservation> res = new ArrayList<Reservation>();
Session s = sf.getCurrentSession();
Criteria cr = s.createCriteria(Reservation.class);
res = cr.list();
return res;
}
public void update(Reservation change) {
Session s = sf.getCurrentSession();
s.update(change);
}
@Transactional
@EnableTransactionManagement
@Repository
public class UserRepository {
@Autowired
SessionFactory sf;
//Allows you to create a new user
public String add(User user) {
Session s= sf.getCurrentSession();
s.persist(user);
return "user created";
}
public List<User> selectAll(){
List<User> users = new ArrayList<User>();
Session s = sf.getCurrentSession();
Criteria cr = s.createCriteria(User.class);
users = cr.list();
return users;
}
public void update(User change) {
Session s = sf.getCurrentSession();
s.update(change);
}
public void delete(User usr) {
Session s = sf.getCurrentSession();
s.delete(usr);
}
public List<User> select(String username){
List<User> user = new ArrayList<User>();
Session s = sf.getCurrentSession();
Criteria cr = s.createCriteria(User.class);
cr.add(Restrictions.eq("username", username));
user = cr.list();
return user;
}
@交易的
@启用事务管理
@存储库
公共类ReservationRepository{
@自动连线
SessionFactory sf;
//创建一个新的预订
公共字符串添加(保留资源){
会话s=sf.getCurrentSession();
s、 持久性(res);
返回“预订请求”;
}
公共列表selectAll(){
List res=new ArrayList();
会话s=sf.getCurrentSession();
Criteria cr=s.createCriteria(Reservation.class);
res=cr.list();
返回res;
}
公共作废更新(预订变更){
会话s=sf.getCurrentSession();
s、 更新(变更);
}
UserRepository.java
@Transactional
@EnableTransactionManagement
@Repository
public class ReservationRepository {
@Autowired
SessionFactory sf;
//Creates a new reservation
public String add(Reservation res) {
Session s = sf.getCurrentSession();
s.persist(res);
return "Reservation Requested";
}
public List<Reservation> selectAll(){
List<Reservation> res = new ArrayList<Reservation>();
Session s = sf.getCurrentSession();
Criteria cr = s.createCriteria(Reservation.class);
res = cr.list();
return res;
}
public void update(Reservation change) {
Session s = sf.getCurrentSession();
s.update(change);
}
@Transactional
@EnableTransactionManagement
@Repository
public class UserRepository {
@Autowired
SessionFactory sf;
//Allows you to create a new user
public String add(User user) {
Session s= sf.getCurrentSession();
s.persist(user);
return "user created";
}
public List<User> selectAll(){
List<User> users = new ArrayList<User>();
Session s = sf.getCurrentSession();
Criteria cr = s.createCriteria(User.class);
users = cr.list();
return users;
}
public void update(User change) {
Session s = sf.getCurrentSession();
s.update(change);
}
public void delete(User usr) {
Session s = sf.getCurrentSession();
s.delete(usr);
}
public List<User> select(String username){
List<User> user = new ArrayList<User>();
Session s = sf.getCurrentSession();
Criteria cr = s.createCriteria(User.class);
cr.add(Restrictions.eq("username", username));
user = cr.list();
return user;
}
@交易的
@启用事务管理
@存储库
公共类用户存储库{
@自动连线
SessionFactory sf;
//允许您创建新用户
公共字符串添加(用户){
会话s=sf.getCurrentSession();
s、 持久化(用户);
返回“用户创建”;
}
公共列表selectAll(){
列表用户=新建ArrayList();
会话s=sf.getCurrentSession();
Criteria cr=s.createCriteria(User.class);
users=cr.list();
返回用户;
}
公共无效更新(用户更改){
会话s=sf.getCurrentSession();
s、 更新(变更);
}
公共作废删除(用户usr){
会话s=sf.getCurrentSession();
s、 删除(usr);
}
公共列表选择(字符串用户名){
List user=new ArrayList();
会话s=sf.getCurrentSession();
Criteria cr=s.createCriteria(User.class);
cr.add(Restrictions.eq(“用户名”,username));
user=cr.list();
返回用户;
}
ReservationController.java
@Controller
@RequestMapping("/Reservation")
@CrossOrigin(origins="*", allowedHeaders="*", value="*")
public class ReservationController {
@Autowired
ReservationService resServ;
@PostMapping(value="/add")
@ResponseBody
public void add(@RequestBody Reservation res) {
resServ.add(res);
}
@GetMapping("/all")
public ResponseEntity<List<Reservation>> selectAll(){
return new ResponseEntity<>(resServ.selectAll(), HttpStatus.OK);
}
@PutMapping("/update")
public void update(@RequestBody Reservation change) {
resServ.update(change);
}
@DeleteMapping("/delete")
public void delete(@RequestBody Reservation res) {
resServ.delete(res);
}
@GetMapping(value="/selectByGuest/{guestId}")
public ResponseEntity<List<Reservation>> selectAllForGuest(@PathVariable String guestId){
return new ResponseEntity<>(resServ.selectAllForGuest(guestId), HttpStatus.OK);
}
@GetMapping(value="/selectByHost/{hostId}")
public List<Reservation> selectAllForHost(@PathVariable String hostId){
return resServ.selectAllForHost(hostId);
}
}
@Controller
@RequestMapping("/User")
@CrossOrigin(origins="*", allowedHeaders="*", value="*")
public class UserController {
@Autowired
UserService usrServ;
@PostMapping(value="/add")
@ResponseBody
public void add(@RequestBody User usr) {
usrServ.add(usr);
}
@GetMapping(value="/all")
public ResponseEntity<List<User>> selectAll(){
return new ResponseEntity<>(usrServ.selectAll(), HttpStatus.OK);
}
@PutMapping(value="/update")
public void update(@RequestBody User change) {
usrServ.update(change);
}
@DeleteMapping(value="/delete")
public void delete(@RequestBody User usr) {
usrServ.delete(usr);
}
@GetMapping(value="/select/{username}")
public ResponseEntity<List<User>> select(@PathVariable String username){
return new ResponseEntity<>(usrServ.select(username), HttpStatus.OK);
}
@GetMapping(value="/selectSSID/{username}")
public ResponseEntity<String> selectSSID (@PathVariable String username){
return new ResponseEntity<>(usrServ.selectSSID(username), HttpStatus.OK);
}
@GetMapping(value="/selectSSIDP/{username}")
public ResponseEntity<String> selectSSIDPassword (@PathVariable String username){
return new ResponseEntity<>(usrServ.selectSSIDPassword(username), HttpStatus.OK);
}
}
@控制器
@请求映射(“/Reservation”)
@交叉原点(Originates=“*”,allowedHeaders=“*”,value=“*”)
公共类ReservationController{
@自动连线
预订服务;
@后期映射(value=“/add”)
@应答器
公共无效添加(@RequestBody Reservation){
添加(res);
}
@GetMapping(“/all”)
公共响应选择全部(){
返回新的响应属性(reserv.selectAll(),HttpStatus.OK);
}
@PutMapping(“/update”)
公共无效更新(@RequestBody保留更改){
更新(变更);
}
@DeleteMapping(“/delete”)
公共作废删除(@RequestBody Reservation){
删除(res);
}
@GetMapping(value=“/selectByGuest/{guestId}”)
public ResponseEntity selectAllForGuest(@PathVariable String guestId){
返回新的ResponseEntity(Reserv.selectAllForGuest(guestId),HttpStatus.OK);
}
@GetMapping(value=“/selectByHost/{hostId}”)
公共列表selectAllForHost(@PathVariable String hostId){
返回Reserv。选择AllForHost(主机ID);
}
}
UserController.java
@Controller
@RequestMapping("/Reservation")
@CrossOrigin(origins="*", allowedHeaders="*", value="*")
public class ReservationController {
@Autowired
ReservationService resServ;
@PostMapping(value="/add")
@ResponseBody
public void add(@RequestBody Reservation res) {
resServ.add(res);
}
@GetMapping("/all")
public ResponseEntity<List<Reservation>> selectAll(){
return new ResponseEntity<>(resServ.selectAll(), HttpStatus.OK);
}
@PutMapping("/update")
public void update(@RequestBody Reservation change) {
resServ.update(change);
}
@DeleteMapping("/delete")
public void delete(@RequestBody Reservation res) {
resServ.delete(res);
}
@GetMapping(value="/selectByGuest/{guestId}")
public ResponseEntity<List<Reservation>> selectAllForGuest(@PathVariable String guestId){
return new ResponseEntity<>(resServ.selectAllForGuest(guestId), HttpStatus.OK);
}
@GetMapping(value="/selectByHost/{hostId}")
public List<Reservation> selectAllForHost(@PathVariable String hostId){
return resServ.selectAllForHost(hostId);
}
}
@Controller
@RequestMapping("/User")
@CrossOrigin(origins="*", allowedHeaders="*", value="*")
public class UserController {
@Autowired
UserService usrServ;
@PostMapping(value="/add")
@ResponseBody
public void add(@RequestBody User usr) {
usrServ.add(usr);
}
@GetMapping(value="/all")
public ResponseEntity<List<User>> selectAll(){
return new ResponseEntity<>(usrServ.selectAll(), HttpStatus.OK);
}
@PutMapping(value="/update")
public void update(@RequestBody User change) {
usrServ.update(change);
}
@DeleteMapping(value="/delete")
public void delete(@RequestBody User usr) {
usrServ.delete(usr);
}
@GetMapping(value="/select/{username}")
public ResponseEntity<List<User>> select(@PathVariable String username){
return new ResponseEntity<>(usrServ.select(username), HttpStatus.OK);
}
@GetMapping(value="/selectSSID/{username}")
public ResponseEntity<String> selectSSID (@PathVariable String username){
return new ResponseEntity<>(usrServ.selectSSID(username), HttpStatus.OK);
}
@GetMapping(value="/selectSSIDP/{username}")
public ResponseEntity<String> selectSSIDPassword (@PathVariable String username){
return new ResponseEntity<>(usrServ.selectSSIDPassword(username), HttpStatus.OK);
}
}
@控制器
@请求映射(“/User”)
@交叉原点(Originates=“*”,allowedHeaders=“*”,value=“*”)
公共类用户控制器{
@自动连线
用户服务usrServ;
@后期映射(value=“/add”)
@应答器
public void add(@RequestBody User usr){
usrServ.add(usr);
}
@GetMapping(value=“/all”)
公共响应选择全部(){
返回新的响应属性(usrServ.selectAll(),HttpStatus.OK);
}
@PutMapping(value=“/update”)
公共无效更新(@RequestBody用户更改){
usrServ.更新(变更);
}
@DeleteMapping(value=“/delete”)
公共无效删除(@RequestBody User usr){
usrServ.删除(usr);
}
@GetMapping(value=“/select/{username}”)
公共响应属性选择(@PathVariable字符串用户名){
返回新的响应属性(usrServ.select(username),HttpStatus.OK);
}
@GetMapping(value=“/selectSSID/{username}”)
公共响应属性selectSSID(@PathVariable字符串用户名){
返回新的响应属性(usrServ.selectSSID(用户名),HttpStatus.OK);
}
@GetMapping(value=“/selectSSIDP/{username}”)
公共响应属性选择SSIDPassword(@PathVariable字符串用户名){
返回新的响应属性(usrServ.selectSSIDPassword(username),HttpStatus.OK);
}
}
对于您的案例控制员,需要用户
对象的有效JSON表示形式。您发布的问题不是有效的JSON字符串
要获得有效的表示,您可以执行以下操作:
User user = new User();
user.setConfirmation(123);
ObjectMapper objectMapper = new ObjectMapper();
System.out.printLn(objectMapper.writeValueAsString(user));
对于您的案例,控制器需要
用户
对象的有效JSON表示。您发布的问题不是有效的JSON字符串
要获得有效的表示,您可以执行以下操作:
User user = new User();
user.setConfirmation(123);
ObjectMapper objectMapper = new ObjectMapper();
System.out.printLn(objectMapper.writeValueAsString(user));
[]
用于列表(单个值),{}
用于对象(具有命名属性及其值)。问题在于,您试图在语法表示需要列表的地方使用命名值。您是在谈论guestId和hostId吗?是的。在示例JSON中,您使用的是[]
语法,但在括号内使用名称/值对。这不是合法的JSON语法。是的,我想看看是否以