2014-12-19 98 views
0

我想建立一個Web應用程序與angularjs和春天休息。對於參考數據(性別,語言,用戶類型 - 使用組合框的類型),我使用了JPA的單表繼承(以ReferenceData作爲基類,語言,性別,用戶類型作爲子類)。

在我的html中,我需要創建用戶屏幕中組合框的UserType和Gender引用數據。我以下列方式限定在角JS一個ReferenceDataService:

myapp.factory('ReferenceData', function ($resource) { 
     return $resource('app/rest/referenceDatas/:id', {}, { 
      'query': { method: 'GET', isArray: true}, 
      'get': { method: 'GET'}, 
      'genders': {method:'GET', isArray: true, cache:true}, 
      'userTypes': {method:'GET', isArray: true, cache:true}, 
     }); 
    }); 

以我angularJs UserServiceController我有以下:

myApp.config(function ($routeProvider, $httpProvider, $translateProvider, USER_ROLES) { 
$routeProvider 
.when('/user', { 
     templateUrl: 'views/users.html', 
     controller: 'UserController', 
     resolve:{ 
      resolvedUser: ['User', function (User) { 
       return User.query().$promise; 
      }], 
      resolvedGender: ['ReferenceData', function (ReferenceData) { 
       return ReferenceData.genders().$promise; 
      }], 
      resolvedUserTypes: ['ReferenceData', function (ReferenceData) { 
       return ReferenceData.userTypes().$promise; 
      }] 
     }, 
     access: { 
      authorizedRoles: [USER_ROLES.all] 
     } 
    }) 
}); 

以下是從我的彈簧控制器代碼片段:

@RequestMapping(value="/rest/referenceDatas/genders", 
     method=RequestMethod.GET, 
     produces = MediaType.APPLICATION_JSON_VALUE) 
@Timed 
public List<? extends ReferenceData> genders(){ 
    return referenceDataRepository.getByType("GENDER"); 
} 

@RequestMapping(value="/rest/referenceDatas/userTypes", 
     method=RequestMethod.GET, 
     produces = MediaType.APPLICATION_JSON_VALUE) 
@Timed 
public List<? extends ReferenceData> userTypes(){ 
    return referenceDataRepository.getByType("USER_TYPE"); 
} 
//DEFAULT getALL 
@RequestMapping(value = "/rest/referenceDatas", 
     method = RequestMethod.GET, 
     produces = MediaType.APPLICATION_JSON_VALUE) 
@Timed 
public List<ReferenceData> getAll() { 
    log.debug("REST request to get all ReferenceDatas"); 
    return referenceDataRepository.findAll(); 
} 

我的問題是我每次打開創建用戶屏幕性別和用戶類型選擇盒裝填充所有類型從Reference_Data表和日誌/調試顯示臨時工每次調用getAll時,我都會調用referencedata angularjs服務上的自定義方法語言和userTypes。

對此非常感謝。

回答

0

這是因爲您在查詢時未傳入任何參數。您的ReferenceData資源具有參數化的URL,如果您在實際的HTTP調用時沒有提供參數值,則會截斷該部分(並因此調用您的getAll())。因此,例如,查詢性別,你可以使用:

  1. 默認PARAMS

    return $resource('app/rest/referenceDatas/:id', {}, { 
        'query': { method: 'GET', isArray: true}, 
        'get': { method: 'GET'}, 
        'genders': {method:'GET', params: {id:'genders'}, isArray: true, cache:true}, 
        'userTypes': {method:'GET', isArray: true, cache:true}, 
    }); 
    
  2. 實際行動通話過程中傳遞的參數:

    resolvedGender: ['ReferenceData', function (ReferenceData) { 
        return ReferenceData.genders({id:'genders'}).$promise; 
    }], 
    
+0

感謝您的答覆普拉香特。我做了這些更改,並看到對性別的調用(在Chrome控制檯中GET GET http:// localhost:8080/app/rest/referenceDatas/genders?cacheBuster = 1419006455309)。但它從服務器返回400錯誤請求。我是否必須在Spring控制器中更改我的請求映射url?類似/ rest/referenceDatas /性別/ {gender}? – r3doc 2014-12-19 16:38:56

+0

我不認爲需要更改Spring Controller URL映射。瀏覽器發送的請求有問題。您可以檢查服務器日誌哪部分請求錯誤/無效。 – 2014-12-20 06:16:07

相關問題