Java控制器和服务-在服务中实现Getter和Setter
我有以下控制器和服务类 UserController.java: 当前,Java控制器和服务-在服务中实现Getter和Setter,java,spring,Java,Spring,我有以下控制器和服务类 UserController.java: 当前,createCard方法在获取用户(“/user/getUser”)和预订(“/user/booking”)时调用了两次 我想createCardwhile“/user/getUser”并在“/user/Booking”时获得此卡。我想获得创建getter和setter的帮助。在您的服务中,您可以使用映射将名称和用户卡存储为键值对: static Map<String , UserCard> userCardIn
createCard
方法在获取用户(“/user/getUser”)和预订(“/user/booking”)时调用了两次
我想
createCard
while“/user/getUser”并在“/user/Booking”时获得此卡。我想获得创建getter和setter的帮助。在您的服务中,您可以使用映射
将名称
和用户卡
存储为键值对:
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;
}
staticmap userCardInfo=newhashmap();
//在createUser内部填充它
私有列表createUser(IContext上下文,字符串用户名){
列表用户=新建ArrayList();
UserCard UserCard=createCard(用户名);
添加(用户卡);
this.userCardInfo.put(用户名、用户卡);
返回用户;
}
//在getUserList中,从该映射中检索
公共用户列表getUserList(IContext上下文,字符串requestAsJSON){
JsonObject requestObj=新的JsonParser().parse(requestAsJSON.getAsJsonObject();
字符串userName=requestObj.get(“Name”).getAsString();
UserCard UserCard=null;
if(this.userCardInfo.containsKey(用户名)){
userCard=this.userCardInfo.get(用户名);
}否则{
userCard=createCard(用户名);
}
列表用户=新建ArrayList();
添加(用户卡);
UserList UserList=new UserList();
userList.setUsers(用户);
返回用户列表;
}
在您的服务中,您可以使用映射
将名称
和用户卡
存储为键值对:
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;
}
staticmap userCardInfo=newhashmap();
//在createUser内部填充它
私有列表createUser(IContext上下文,字符串用户名){
列表用户=新建ArrayList();
UserCard UserCard=createCard(用户名);
添加(用户卡);
this.userCardInfo.put(用户名、用户卡);
返回用户;
}
//在getUserList中,从该映射中检索
公共用户列表getUserList(IContext上下文,字符串requestAsJSON){
JsonObject requestObj=新的JsonParser().parse(requestAsJSON.getAsJsonObject();
字符串userName=requestObj.get(“Name”).getAsString();
UserCard UserCard=null;
if(this.userCardInfo.containsKey(用户名)){
userCard=this.userCardInfo.get(用户名);
}否则{
userCard=createCard(用户名);
}
列表用户=新建ArrayList();
添加(用户卡);
UserList UserList=new UserList();
userList.setUsers(用户);
返回用户列表;
}
这两个请求是独立的REST是无状态的,因此如何才能做到这一点?最好的选择是,您可以将第一次请求时创建的数据传递给客户端。然后,对于第二个请求,您的客户将使用请求主体提供此数据。您可以将数据放在静态变量上,但这不是一个好的做法
您可以这样做:
if (UserID != null) {
UserDetails userDetails = userService.getUserDetails(context, userID);
responseMap.put("userDetails",userDetails);
}
当从客户端调用时,客户端应向请求添加用户卡数据。在请求对象上生成将接受用户卡数据的请求。可能是您的代码已经在执行此操作。这两个是单独的请求REST是无状态的,因此如何才能做到这一点?最好的选择是,您可以将第一次请求时创建的数据传递给客户端。然后,对于第二个请求,您的客户将使用请求主体提供此数据。您可以将数据放在静态变量上,但这不是一个好的做法 您可以这样做:
if (UserID != null) {
UserDetails userDetails = userService.getUserDetails(context, userID);
responseMap.put("userDetails",userDetails);
}
当从客户端调用时,客户端应向请求添加用户卡数据。在请求对象上生成将接受用户卡数据的请求。可能是您的代码已经在执行此操作。我不建议为
UserCard
对象创建一个setter,因为您无法确定REST API将以某种顺序调用,例如首先调用/user/getUser
,然后再调用/user/Booking
。我建议将整个User
或UserCard
对象作为请求负载传递给/User/Booking
。使用setter的第二个问题是,您无法预测在/user/Booking
之前将调用多少次/user/getUser
方法,因此您的用户实际上可以在使用它之前进行更新。我认为缓存还有一个使用期限,它不适合您的情况吗?我不建议为UserCard
对象创建一个setter,因为您无法确定REST API将以某种顺序调用,比如首先调用/user/getUser
,然后再调用/user/Booking
。我建议将整个User
或UserCard
对象作为请求负载传递给/User/Booking
。使用setter的第二个问题是,您无法预测在/user/Booking
之前将调用多少次/user/getUser
方法,因此您的用户实际上可以在使用它之前进行更新。我认为缓存还有一个使用期限,它不适合您的情况吗?需要从responseMap检索吗?是的。如果希望将hashmap保留为返回类型,那么可以在第一个requestset responseMap期间将卡数据放在hashmap上,并像这样传递它:IUserResponse userresponse=userService.createBooking(RequestAsJSON,context,requestMap);我希望,这是正确的方法并且会起作用。你能分享你的预订服务吗?createBooking方法?然后,我可以告诉您在返回响应时需要更新什么,并通过您正在使用的转换器将其转换为JSON数组。所以,客户端可以解析您的响应映射,并使用必要的数据作为RequestAsJSON字段构建RequestAsJSON数据。您不需要在请求中接受额外的参数responseMap。但这取决于你,你可以发送两者,也可以使用相同的参数发送。需要吗