Вы не очень понимаете что у вас происходит в коде. Пара комментариев в коде:
@POST
@Path("/add")
@Produces(MediaType.APPLICATION_JSON)
public String saveNewPerson(JSONObject person) throws JSONException {
//вызов этого метода никак не влияет на код, так как toString() возвращает строку, но вы ее никак не используете
person.toString();
// тут как раз и происходит toString();
System.out.println(person + " output in service.java");
//почему в savePerson() вы кладете NULL?
if (!personDao.savePerson(null)) {
return "Person create success id=";
} else {
return "error, check information for new person";
}
}
******************************************
// Тут нужно класть Entity класс ,а не JSONObject.
session.saveOrUpdate(person);
Вы передаете в метод null и естественно у вас ошибка. Но даже если бы вы передавали свой JSONObject, то ничего не произойдет, потому как сохранять необходимо персистентный обьект, представляющий таблицу в базе данных. Так называемый entity.
Вот как примерно он мог бы у вас выглядеть:
@Entity
@Table(name = "person")
public class Person implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@Column(name = "id", nullable = false)
private int id;
@Column(name = "full_name")
private String fullName;
@Column(name = "age")
private int age;
@Column(name = "city")
private String city;
@Column(name = "gender")
@Enumerated(EnumType.STRING)
private Gender gender;
public Person(){
}
// геттеры и сеттеры обязательно
}
В общем почитайте матчасть немного.