Java JAX-RS和CDI注入有状态会话bean:setter不工作

Java JAX-RS和CDI注入有状态会话bean:setter不工作,java,session,jax-rs,cdi,stateful-session-bean,Java,Session,Jax Rs,Cdi,Stateful Session Bean,我正在使用RESTEasy开发一个Web服务 我有一个“身份验证”Web服务,有两种方法:“登录”和“注销” 我有一个有状态会话范围的bean,UserData有两个属性:“loggedIn”,boolean和“userId”,Integer 我正在身份验证类中注入UserData。对于“loggedIn”属性,它工作得很好,当我调用“login”方法时,它被设置为true,然后一直保持true,直到会话结束 但奇怪的是,它不使用“userId”属性。当我调用“login”方法时,我将userI

我正在使用RESTEasy开发一个Web服务

我有一个“身份验证”Web服务,有两种方法:“登录”和“注销”

我有一个有状态会话范围的bean,UserData有两个属性:“loggedIn”,boolean和“userId”,Integer

我正在身份验证类中注入UserData。对于“loggedIn”属性,它工作得很好,当我调用“login”方法时,它被设置为true,然后一直保持true,直到会话结束

但奇怪的是,它不使用“userId”属性。当我调用“login”方法时,我将userId设置为我的用户id,但在调用“setUserId”方法之后,userId仍然为null

以下是身份验证类代码(无注销方法,暂时未使用):

下面是“UserData”类的代码:

package com.bini.dev.dilemme.web;
导入java.io.Serializable;
导入javax.enterprise.context.SessionScoped;
导入com.fasterxml.jackson.annotation.jsonautodect;
@会议范围
@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.PROTECTED_和_PUBLIC,
GettServiceability=jsonautodect.Visibility.NONE,
setterVisibility=jsonautodect.Visibility.NONE)
公共类UserData实现可序列化{
保护布尔loggedIn;
受保护的整数用户标识;
公共用户数据(){
this.loggedIn=false;
this.userId=null;
}
公共布尔值isLoggedIn(){
返回loggedIn;
}
public void setLoggedIn(布尔loggedIn){
this.loggedIn=loggedIn;
}
公共整数getUserId(){
返回用户标识;
}
public void setUserId(整数userId){
this.userId=userId;
}
}
我尝试了使用或不使用“有状态”和“无状态”注释。不会改变任何事情

我真的不知道该怎么办

我认为这可能是一个“setter”语法错误,但我真的不知道在哪里

编辑:顺便说一句,我正在WildFly服务器上使用Weld和RestEASY。
谢谢:)

WildFly 8.1默认使用Jackson2库进行JSON序列化。我认为
JsonAutoDetect
只在jackson1中可用,因此它没有注册。实际上更重要的是——为什么要注册EJB来包含这些数据<代码>已处理的会话应该足够了,不是吗?JAX-RS实际上并没有定义会话,我只是查看了Jackson文档,它与Jackson 2一起工作。这个问题应该发生在JSON序列化之前,不是吗?更清楚一点,这是我在登录之前得到的:{loggedIn:false,userId:null}和之后:{loggedIn:true,userId:null}@JohnAment你是对的,我删除了“无状态”和“有状态”,但它没有改变任何东西。我不明白的是为什么它能很好地处理布尔值而不是整数。这是胡说八道。你能添加关于什么的详细信息吗
User=userService.getUserByMailAddress(userMail.trim())是什么?你还可以添加你的导入语句吗?你没有澄清你使用的是Jackson 1还是Jackson 2。
package com.bini.dev.dilemme.web.api;

import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;

import com.bini.dev.dilemme.business.service.UserService;
import com.bini.dev.dilemme.persistence.model.User;
import com.bini.dev.dilemme.web.UserData;

@Path("/auth")
public class AuthenticationApi {

    @Inject
    private UserData userData;

    @Inject
    private UserService userService;

    @GET
    @Path("login")
    @Produces("application/json")
    public UserData logIn(@QueryParam("mail") String userMail, @QueryParam("password") String userHashedPassword) {
        try {
            this.logOut();
            User user = userService.getUserByMailAddress(userMail.trim());
            if (user == null)
                throw new Exception("User does not exists");
            boolean loggedIn = userService.checkUserPassword(user, userHashedPassword.trim());
            if (loggedIn) {
                userData.setLoggedIn(true);
                userData.setUserId(user.getUserId());
            }
            return userData;
        } catch (Exception e) {
            e.printStackTrace();
            return userData;
        }
    }
}