Я хочу сохранить некоторые данные из HTML-формы (работающей с AngularJS) в мою базу данных, используя Spring. Для этого я использую аннотацию @RequestBody
с POJO, но я не могу заставить ее работать: мой POJO не создан, но похоже, что атрибуты POJO не сопоставляются с моими значениями формы (они все равны нулю).RequestBody POJO всегда пусто
Контроллер:
@RequestMapping(value = "/createEntities", method = RequestMethod.POST)
@ResponseBody
public List<Entity> createEntities(@RequestBody final EntityList resource, @RequestParam final String kind) {
System.out.println("Creating entity for: " + kind);
Preconditions.checkNotNull(resource);
List<Entity> newEntities = new ArrayList<Entity>();
System.out.println("Entity test = " + resource.getTest()); // Prints "Entity test = null"
// Code below returns NullException
//System.out.println("Entity list nb = " + resource.getEntity().size());
if (resource.getEntities() != null && !resource.getEntities().isEmpty()) {
System.out.println("Entity list is OK");
for (EntityForm eForm : resource.getEntities()) {
if (eForm.getGrant() != null) {
Entity ent = new Entity();
if ("RTS".equals(kind)) {
ent.setDept(deptService.findByAbr(DeptEnum.RTS.name()));
} else {
ent.setDept(deptService.findByAbr(DeptEnum.RTB.name()));
}
ent.setGrant(eForm.getGrant());
ent.setCountry(eForm.getCountry());
ent.setName(eForm.getName());
ent = service.create(ent);
newEntities.add(ent);
}
}
}
return newEntities;
}
EntityList
является POJO для моей формы. Этот POJO содержит список EntityForm
(+ строка для целей тестирования), которая является DTO для моего объекта базы данных Entity
.
EntityList POJO:
public class EntityList implements Serializable {
private static final long serialVersionUID = 6335318686899794229L;
private List<EntityForm> entities;
private String test;
public EntityList() {
super();
}
public EntityList(List<EntityForm> entities, String test) {
super();
this.entities = entities;
this.test = test;
}
public List<EntityForm> getEntities() {
return entities;
}
public void setEntities(List<EntityForm> entities) {
this.entities = entities;
}
public String getTest() {
return test;
}
public void setTest(String test) {
this.test = test;
}
}
Я думал, что проблема возникла из плохого отображения между моим списком лиц в моей форме и мой List<EntityForm>
в моем POJO, поэтому я добавил простую строку в мою POJO ,
AngularJS боковые
Услуги:
app.factory("Entities", function($resource) {
return $resource("api/auth/entities", null,
{
createEntities: {method:'POST', url: "api/auth/entities/createEntities", params: { kind: '@kind' }, isArray:true}
});
})
Контроллер:
$scope.EntForm = {};
$scope.EntForm.entities = [];
$scope.EntForm.test = "myTest";
/* ... */
$scope.saveEnt= function() {
console.log($scope.EntForm);
Entities.createEntities($scope.EntForm,{kind:"RTS"},function(res) {
var msg = 'Entities created...';
ngToast.create(msg);
$location.path("/entities");
});
}
В моей консоли Firefox, я вижу, что $scope.EntForm
правильно установить (я все мое существо объекты с установленные поля, а также тестовую строку, определенную в контроллере).
Результат
Все это код будет отображаться:
Creating entity for: RTS
Entity test = null
Что я делаю неправильно?
Если вы говорите о отправке моего собственного запроса POST без использования метода AngularJS 'createEntities', я не могу. Существуют требования к аутентификации (я не знаю, как это работает, так как я не кодировал эту часть приложения, поэтому я не могу просто отключить его), каждый запрос GET/POST терпит неудачу, если я попытаюсь отправить его через Инструменты Firefox dev. Есть ли другой способ проверить, работает ли мой метод? – Carrm
@Chugrothas Я хотел проверить фактическое содержимое запроса POST, которое генерирует ваше приложение AngularJS.Я не использовал Firefox некоторое время для разработки и даже не устанавливал его на моем текущем компьютере, поэтому сам не могу его проверить, но с помощью [Web Console] (https: //developer.mozilla. org/en-US/docs/Tools/Web_Console), вы должны иметь возможность отслеживать, например, сделанные сетевые запросы. Затем вы должны убедиться, что ваше приложение AngularJS правильно заполняет содержимое POST. – jmustonen
О да, извините, я полностью забыл о существовании сетевого зрителя в консоли Firefox. Я проверил, и отправленный запрос POST имеет правильные параметры (я могу видеть мои сущности и строку «test»). – Carrm