Spring MVC - 标题中的Autowired字段

时间:2014-08-07 10:03:48

标签: spring web-services spring-mvc autowired

我用spring mvc(版本4)制作了网络服务 此服务使用http标头中的标记进行授权 我想在http头绑定到模型类auto中的字段值 可能吗?我能怎么做? (见下面的代码和评论)

控制器

@Controller
@RequestMapping(value = "/order")
public class OrderController {
    private static final Logger logger = LoggerFactory.getLogger(OrderController.class);

    @Autowired
    private OrderService orderService;

    @RequestMapping(value = "/")
    @ResponseBody
    public List<Order> getAll() throws Exception {
        // I want to remove two line below with auto binding (userToken field in model)
        //   in all controller using token value  
        String token = request.getHeader("X-Auth-Token"); // remove~
        orderService.setUserToken(token); // remove~

        orderService.getAllbyUser()

        return items;
    }
}

模型(服务)

@Service
public class OrderService {
    //@Autowired - is it possible?
    private String userToken;

    public String setUserToken(String userToken)
    {
        this.userToken = userToken;
    }

    public List<Order> getAllbyUser() {
        String userId = userMapper.getUserId(userToken);
        List<Order> list = orderMapper.getAllbyUser(userId);
        return list;
    }
}

2 个答案:

答案 0 :(得分:1)

@Autowire是让Spring将豆子注入其中。如果要使用org.springframework.beans.factory.annotation.Value注释将bean注入到bean中。

例如:

@Value("${user.token}")
private String userToken;

这将使Spring搜索VM args和其他地方的user.token(我不记得并以某种特定的顺序)。

但是,正如我在最初的评论中所说的那样,从这里显示的代码来看,设置此字段似乎是一个错误,因为它是特定于上下文的,而@Service(默认情况下)表示OrderService是一个单例。 / p>

答案 1 :(得分:1)

要从请求中读取标头值,您可以在控制器中使用@RequestHeader("X-Auth-Token"),如下所示:

@RequestMapping(value = "/")
@ResponseBody
public List<Order> getAll(@RequestHeader("X-Auth-Token") String token) throws Exception {
    orderService.setUserToken(token); // remove~
    orderService.getAllbyUser()
    return items;
}

希望这会对你有所帮助。