Hibernate 和 angular 4+ http get - 参数值与预期类型不匹配
Hibernate and angular 4+ http get - Parameter value did not match expected type
我的后端遇到了非常奇怪的行为。
在 angular 4 中编写的前端,我从后端调用方法,该方法将从特定数据库 table 获取特定组织单位的所有员工。另外,我正在调用使用后端应用程序的选项填充 MatSelect 的方法。
代码:
后端控制器:
@RequestMapping(value = "/orgid/{orgid}", produces = "application/json")
public Iterable<Employee> getEmployeeByOrgId(@PathVariable("orgid") String orgid, HttpServletRequest req){
Iterable<Employee> getEmpByOrgId = eDao.findEmployeesByOrgNameId(orgid);
return getEmpByOrgId;
}
后端 DAO:
@Query("SELECT new model.Employees(p.id, p.firstName, p.lastName, p.organizationName, p.subOrganizationName, p.mobilephoneNumber, p.telephoneNumber, p.smallImage, p.jobTitle) FROM Employee p WHERE p.orgId = :orgId ORDER by p.lastName")
public Iterable<Employee> findEmployeesByOrgNameId(@Param("orgId") String orgId);
前端服务:
fetchEmployeesByOrg(org): Observable<Employees[]>{
const url ="employees/orgid/"+org;
return this.http.get<Employees[]>(url);
}
前端组件:
fetchAllEmployeesByOrgId(org){
this.orgId = org.id.toString();
console.log(typeof this.orgId);
this.fetch.fetchEmployeesByOrg(this.orgId).subscribe(res => {
this.EmployeesByOrg = res;
console.log(this.EmployeesByOrg);
})
}
前端html:
<mat-select placeholder="Choose it">
<mat-option *ngFor="let org of this.orgUnits" [value]="org.value" (click)="fetchAllEmployeesByOrgId(org)">
{{ org.orgName }}
</mat-option>
单击特定选项时 url 的外观:employees/orgid/166
问题:
我正在 java.lang.IllegalArgumentException: Parameter value [166] did not match expected type [java.lang.Integer (n/a)]
如上所述,我希望后端有字符串,而且我在 url.
中提供字符串
可能是自定义查询内部的问题或其他问题?
任何帮助都会很棒。
问题是 @param
arg 作为 String
注入到查询中,因此必须更改方法签名:
findEmployeesByOrgNameId(@Param("orgId") Integer orgId)
并且如果您将 String
传递给您的控制器(您确定可以解析为 Integer
),您可以将参数转换为 Integer
然后调用 dao 方法:
eDao.findEmployeesByOrgNameId(Integer.valueOf(orgid));
我的后端遇到了非常奇怪的行为。
在 angular 4 中编写的前端,我从后端调用方法,该方法将从特定数据库 table 获取特定组织单位的所有员工。另外,我正在调用使用后端应用程序的选项填充 MatSelect 的方法。
代码:
后端控制器:
@RequestMapping(value = "/orgid/{orgid}", produces = "application/json")
public Iterable<Employee> getEmployeeByOrgId(@PathVariable("orgid") String orgid, HttpServletRequest req){
Iterable<Employee> getEmpByOrgId = eDao.findEmployeesByOrgNameId(orgid);
return getEmpByOrgId;
}
后端 DAO:
@Query("SELECT new model.Employees(p.id, p.firstName, p.lastName, p.organizationName, p.subOrganizationName, p.mobilephoneNumber, p.telephoneNumber, p.smallImage, p.jobTitle) FROM Employee p WHERE p.orgId = :orgId ORDER by p.lastName")
public Iterable<Employee> findEmployeesByOrgNameId(@Param("orgId") String orgId);
前端服务:
fetchEmployeesByOrg(org): Observable<Employees[]>{
const url ="employees/orgid/"+org;
return this.http.get<Employees[]>(url);
}
前端组件:
fetchAllEmployeesByOrgId(org){
this.orgId = org.id.toString();
console.log(typeof this.orgId);
this.fetch.fetchEmployeesByOrg(this.orgId).subscribe(res => {
this.EmployeesByOrg = res;
console.log(this.EmployeesByOrg);
})
}
前端html:
<mat-select placeholder="Choose it">
<mat-option *ngFor="let org of this.orgUnits" [value]="org.value" (click)="fetchAllEmployeesByOrgId(org)">
{{ org.orgName }}
</mat-option>
单击特定选项时 url 的外观:employees/orgid/166
问题:
我正在 java.lang.IllegalArgumentException: Parameter value [166] did not match expected type [java.lang.Integer (n/a)]
如上所述,我希望后端有字符串,而且我在 url.
可能是自定义查询内部的问题或其他问题? 任何帮助都会很棒。
问题是 @param
arg 作为 String
注入到查询中,因此必须更改方法签名:
findEmployeesByOrgNameId(@Param("orgId") Integer orgId)
并且如果您将 String
传递给您的控制器(您确定可以解析为 Integer
),您可以将参数转换为 Integer
然后调用 dao 方法:
eDao.findEmployeesByOrgNameId(Integer.valueOf(orgid));