neo55
@neo55
junior

Как сделать правильно POST запрос java?

Занимаюсь созданием rest сервиса (использую: Java, Maven, TomCat, MySql, Hibernate). Пытаюсь реализовать добавление в бд новых данных через POST запрос. Но никак не получается сделать, данные в базу не записываются. Что мне нужно откорректировать чтобы запрос прошел?

Если я получаю от сервера данные через JSON то получаю вот в таком виде:
[{"person":{"id":11,"fullName":"Maria","age":19,"city":"Tver","gender":"female"}},{"person":{"id":12,"fullName":"Nadya","age":29,"city":"Omsk","gender":"female"}},{"person":{"id":13,"fullName":"Sergey","age":18,"city":"Novosibirsk","gender":"male"}}]


При отправке запроса в Body пишу:
{"person":{"fullName":"Maria111","age":19,"city":"Tver","gender":"female"}}


service.java:
@POST
    @Path("/add")
    @Produces(MediaType.APPLICATION_JSON)
    public String saveNewPerson(JSONObject person) throws JSONException {
        person.toString();
         System.out.println(person + " output in service.java");
        if (!personDao.savePerson(null)) {
            return "Person create success   id=";
 
        } else {
            return "error, check information for new person";
        }
    }


PersonDao.java:
public boolean savePerson(JSONObject person) {
         System.out.println(person+" output in personDAO.java");
        Session session = null;
        boolean hasErrors = false;
 
        try {
            session = sessionFactory.openSession();
            session.beginTransaction();
            session.saveOrUpdate(person);
            session.getTransaction().commit();
 
        } catch (Exception ex) {
            if (session != null) {
                session.getTransaction().rollback();
                  Log.write("Ошибка в методе savePerson ");
            }
            hasErrors = true;
 
        } finally {
            if (session != null) {
                session.close();
            }
        }
        return hasErrors;
    }
  • Вопрос задан
  • 935 просмотров
Решения вопроса 1
timych
@timych
Вы не очень понимаете что у вас происходит в коде. Пара комментариев в коде:
@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(){
	}
	
	// геттеры и сеттеры обязательно
}


В общем почитайте матчасть немного.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы