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



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

UserController.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"(和预订("/uuser/booking"(时调用两次。

我想在"/user/getUser"时createCard,并在"/uuser/Booking"时获得这张卡。我想在创建getter和setter方面得到帮助。

在您的服务中,您可以使用MapnameuserCard存储为键值对:

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;
}

这两个是单独的请求REST是无状态的,那么如何做到这一点呢?最好的选择是,您可以将数据传递到您在第一次请求时创建的客户端。然后,对于第二个请求,您的客户端将使用请求体提供此数据。您可以将数据放在静态变量上,但这不是一个好的做法。

你可以这样做:

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

当从客户端调用时,客户端应添加用户卡数据以请求。在请求对象上构建一个将接受usercardata的请求。可能是您的代码已经在执行此操作。

最新更新