2014-12-19 157 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

相关问题