代码之家  ›  专栏  ›  技术社区  ›  Futuregeek

Java控制器和服务-在服务中实现Getter和Setter

  •  0
  • Futuregeek  · 技术社区  · 6 年前

    我有以下控制器和服务类,

    用户控制器.java:

    @RequestMapping(value = "/user/getUser")
    @ResponseBody
    public Map<String, Object> getUser(@ModelAttribute UserRequestModel userRequest, HttpServletRequest request)
            throws Exception {
        final IContext context = contextFactory.getContext(request);
        Map<String, Object> responseMap = new HashMap<>();
    
        String UserID = userService.getUserID(context, userRequest.getName());
    
        if (UserID != null) {
            UserDetails userDetails = userService.getUserDetails(context, userID);
            ...
        }
    
        ...
    
     return responseMap;
    }
    
    ------
    @RequestMapping(value = "/user/Booking")
    @ResponseBody
    public Map<String, Object> Booking(@RequestParam("bookingRequest") String RequestAsJSON,HttpServletRequest request) throws Exception {
        Map<String, Object> responseMap = new HashMap<>();
    
        final IContext context = contextFactory.getContext(request);
        UserList userList = userService.getUserList(context, RequestAsJSON);
        IUserResponse userresponse = userService.createBooking(RequestAsJSON, context, userList);
        return responseMap;
    }
    

    也遵循服务级别,

    UserService.java

    @Override
    public String getUserID(IContext requestContext, String userName) {
       String userID = null;
       List<User> users = createUser(context, userName);
       userID = <API>.getID(context, userList);
       return userID;
    }
    
    @Override
    public UserDetails getUserDetails(IContext context, String userID) {
       UserDetails userDetails = null;
       userDetails = <API>.getUserDetails(userID, context);
       return userDetails;
    }
    
    @Override
    public UserList getUserList(IContext context, String requestAsJSON) {
        JsonObject requestObj = new JsonParser().parse(requestAsJSON).getAsJsonObject();
        String userName = requestObj.get("Name").getAsString();
        UserCard userCard = createCard(userName);
        List<User> users = new ArrayList<>();
        users.add(userCard);
        UserList userList = new UserList();
        userList.setUsers(users);
        ..
    
        return userList;
    }
        ....
    private List<User> createUser(IContext context, String userName) {
       List<User> users = new ArrayList<>();
       UserCard userCard = createCard(userName);
       users.add(userCard);
       return users;
    }
    
    private UserCard createCard(String userName) {
       UserCard userCard = new UserCard();
       userCard.setOfficeID(12345);
       userCard.setAddress("Addr1");
       userCard.setOffice(“Test”);
       return userCard;
    }
    

    目前 createCard 方法在获取用户(“/user/getUser”)和预订(“/user/booking”)时调用两次。

    我想 while“/user/getUser”并在“/user/Booking”时获取此卡。我想在创建getter和setter方面得到帮助。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Mihai Chelaru klin    6 年前

    在你的服务中,你可以使用 Map 储存 name userCard

    static Map<String , UserCard> userCardInfo = new HashMap<>();
    
    //inside createUser populate it
    
    private List<User> createUser(IContext context, String userName) {
        List<User> users = new ArrayList<>();
        UserCard userCard = createCard(userName);
        users.add(userCard);
        this.userCardInfo.put(userName , userCard);
        return users;
    }
    
    //and inside getUserList retrieve from that map
    
    public UserList getUserList(IContext context, String requestAsJSON) {
        JsonObject requestObj = new JsonParser().parse(requestAsJSON).getAsJsonObject();
        String userName = requestObj.get("Name").getAsString();
        UserCard userCard = null;
        if(this.userCardInfo.containsKey(userName)) {
            userCard = this.userCardInfo.get(userName);
        } else {
            userCard = createCard(userName);
        }
    
        List<User> users = new ArrayList<>();
        users.add(userCard);
        UserList userList = new UserList();
        userList.setUsers(users);
        return userList;
    }
    
        2
  •  1
  •   flopcoder    6 年前

    这两个是单独的请求。 休息 是无状态的所以你怎么能做到?最好的选择是,您可以将第一次请求时创建的数据传递到客户端。然后为了 第二次请求 请求体 . 可以将数据放在静态变量上,但这不是一个好的做法。

    你可以这样做:

    if (UserID != null) {
                UserDetails userDetails = userService.getUserDetails(context, userID);
                responseMap.put("userDetails",userDetails);
            }
    

    当从客户端调用时,客户端应该 . 生成将接受的请求 请求