org.springframework.security.core.userdetails.User から拡張された Bean があり、この Bean を openID で使用しています。Bean は次のようになります。
package com.employee;
import java.util.Collection;
import javax.xml.bind.annotation.XmlRootElement;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.User;
@XmlRootElement(name="Employee")
public class Employee extends User{
private int empId;
private String deptName;
public Employee() {
super("", "unused", null);
}
public Employee(String username, Collection<GrantedAuthority> authorities) {
super(username, "unused", authorities);
}
public int getEmpId() {
return empId;
}
public void setEmpId(int empId) {
this.empId = empId;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
}
コントローラーは、Employee のインスタンスを次のように受け入れます。
@RequestMapping(value = "/addEmp.do", method = RequestMethod.POST) public @ResponseBody String addEmployee(@RequestBody Employee emp) {...}
次の本文で POST リクエストを送信しました。
<?xml version="1.0" encoding="UTF-8"?>
<Employee>
<empId>10</empId>
<deptName>abc</deptName>
</Employee>
ただし、addEmp 操作を呼び出すと、次の JAXB 例外が発生します。
2012-12-16 15:25:55,364{HH:mm:ss} DEBUG [http-bio-8080-exec-1] (AbstractHandlerExceptionResolver.java:132) -
Resolving exception from handler [public java.lang.String com.main.EmpController.addEmployee(com .employee.Employee)]:
org.springframework.http.converter.HttpMessageNotReadableException: Could not unmarshal to
[class com.employee.Employee]: Unable to create an instance of com.employee.Employee; nested exception is
javax.xml.bind.UnmarshalException: Unable to create an instance of com.employee.Employee