Java 如何在postman中传递类对象?

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%确定这是一个

我不熟悉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语法。是的,我想看看是否以