1

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
4

1 に答える 1

1

エラーメッセージ:

com.employee のインスタンスを作成できません

入力が有効な従業員プロパティを提供していないことを意味する場合があります。コンストラクタで

public Employee() {
    super("", "unused", null);
}

デフォルトのユーザー名は「」に設定されていますが、Spring Security は空白のユーザー名を受け入れません。

于 2012-12-16T16:07:55.800 に答える