POST嵌套对象Rest Spring MVC AngularJS
问题描述:
我试图解决保存具有一对一关系的实体的问题。POST嵌套对象Rest Spring MVC AngularJS
我有租客对象,有一个字段公寓。当我尝试一个新的租户对象,我得到400错误虽然PARAMS似乎确定保存到我每次:
如果我从输入表格中删除公寓,租户可以毫无问题地保存。
如何保存实体及其关系?
RestController
@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<?> create(@Valid @RequestBody Tenant tenant, BindingResult result) {
if (result.hasErrors()) {
ApiResponse message = new ApiResponse();
message.setErrors(result.getFieldErrors());
return new ResponseEntity<ApiResponse>(message, HttpStatus.UNPROCESSABLE_ENTITY);
}
try {
service.saveTenant(tenant);
} catch (ConstraintViolationException e) {
result.rejectValue("apartmentNumber", "error.apartment", DUPLICATE_VALUE);
Map<String, String> test = new HashMap<>();
for (FieldError fieldError : result.getFieldErrors()) {
test.put(fieldError.getField(), fieldError.getDefaultMessage());
}
return new ResponseEntity<Map<String, String>>(test, HttpStatus.CONFLICT);
}
return new ResponseEntity<Tenant>(tenant, HttpStatus.CREATED);
}
JSP页面 - 相关
<div class="form-group">
<label for="inputEmail3" class="col-sm-3 control-label">Mieszkanie</label>
<div class="col-sm-9">
<select name='apartment' ng-model="ctrl.tenant.apartment" ng-required='true' class="form-control">
<option ng-repeat="item in ctrl.apartments" value="{{item}}"
ng-selected="ctrl.tenant.apartment.description == item.description">
{{item.description}}</option>
</select>
<p class="help-block">
<span class='error' ng-show="myForm.tenant_apartment.$invalid">
Pole wymagane</span> <span class='error'>{{errors.tenant_apartment}}</span>
</p>
</div>
</div>
答
输入是您的租户类有公寓房的一个成员变量集类型。 我的意思是
public class Tenant implements Serializable { private Set<Appartment> appartment; ..... ..... }
它是一种一对一的关系,它只是 '@OneToOne 私人公寓出租;' – Maciej