2016-09-18 70 views
1

我試圖解決保存具有一對一關係的實體的問題。POST嵌套對象Rest Spring MVC AngularJS

我有租客對象,有一個字段公寓。當我嘗試一個新的租戶對象,我得到400錯誤雖然PARAMS似乎確定保存到我每次:

PARAMS
Params

響應: Response

如果我從輸入表格中刪除公寓,租戶可以毫無問題地保存。

如何保存實體及其關係?

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> 

回答

0

輸入是您的租戶類有公寓房的一個成員變量集類型。 我的意思是

 
public class Tenant implements Serializable { 

    private Set<Appartment> appartment; 
    ..... 
    ..... 
} 
+0

它是一種一對一的關係,它只是 '@OneToOne 私人公寓出租;' – Maciej