如何更改对象字段的呈现方式,同时仍保留所述字段的原始值?
How can I change how an objects field is PRESENTED while still retaining the original value of said field?
我正在从事一个项目,该项目涉及使用 JDBC 模板创建 Spring 引导 REST 应用程序以访问我自己创建的数据库 (MySQL)。我正在使用 Postman 来验证端点并通过邮递员使用 JSON 输入数据。我目前的任务是创建一个生成随机 4 位数字的猜谜游戏,非常简单。我的问题是这样的; “ Returns 基于 ID 的特定游戏。确保进行中的游戏不会显示其答案” 我创建了一个满足要求的“入门”方法,但仅限于最基本的级别。一旦对象的字段值更改为“隐藏”,我就无法对对象进行操作,因为它不再是 4 位数字。我想 隐藏 答案,同时仍然能够以功能方式对随机生成的数字进行操作。这是我的基本方法 return:
@Override
public Game gameById(int id) {
Game game = gameDao.getGameById(id);
if (game.getFinished() == false) { // "Hides" the answer
game.setGameAnswer("Hidden");
}
return game;
}
这是我在应用程序中使用上述代码的方法:
@PostMapping("/guess")
public ResponseEntity<Game> play( int id, String guess) {
Game game = service.gameById(id); // Get method
if (game == null) {
return new ResponseEntity(null, HttpStatus.NOT_FOUND);
}
Round round = new Round();
round.setGuess(guess);
service.guess(round, game);
return ResponseEntity.ok(game);
}
有什么想法吗?
编辑:
游戏对象:
public class Game {
int gameId;
String gameAnswer;
Boolean finished;
List<Round> Rounds = new ArrayList<>();
我还将包括数据库游戏 table,我将这些字段存储到:
CREATE TABLE game(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
gameAnswer CHAR(4) NOT NULL,
finished BOOLEAN DEFAULT false
);
为了澄清我的问题,当 运行 postman 中的游戏时,游戏对象及其字段以及游戏答案都会显示。我的目标是 隐藏 这个答案,只要游戏状态显示为“false”。一旦猜中数字,游戏状态将自动设置为真。
这是邮递员 JSON 输出的示例:
{
"gameId": 1,
"gameAnswer": "2651",
"finished": false,
"rounds": [
{
"roundId": 1,
"guess": "1234",
"timeOfGuess": "2021-06-18 09:28:29",
"exactMatch": 0,
"partialMatch": 0,
"gameId": 1
}
]
}
当“Finished”设置为 false 时,我希望游戏答案显示为“Hidden”,但仍然有数值可供操作。
猜测方法:
@Override
public void guess(Round round, Game game) {
// Takes the games generated answer and the user's guess and breaks them down into character array's
round.setGameId(game.getGameId());
char[] gameAnswer = characterBreakDown(game.getGameAnswer());
char[] roundGuess = characterBreakDown(round.getGuess());
// used for comparing the array elements one by one
int min = 0;
int max = 1;
int exact = 0;
boolean run = true;
while (run) {
for (int i = 0; i <= 3; i++) {
if (Arrays.equals(roundGuess, gameAnswer)) {
round.setExactMatch(4);
game.setFinished(true);
gameDao.updateGameById(game);
run = false;
} else if (Arrays.equals(roundGuess, min, max, gameAnswer, min, max)) {
exact++;
round.setExactMatch(exact);
min++;
max++;
if (i == 3 && round.getExactMatch() >= 2) {
round.setPartialMatch(round.getExactMatch());
run = false;
} else if (i == 3) {
run = false;
}
} else if (!Arrays.equals(roundGuess, min, max, gameAnswer, min, max)) {
min++;
max++;
if (i == 3 && round.getExactMatch() >= 2) {
round.setPartialMatch(round.getExactMatch());
run = false;
} else if (i == 3) {
run = false;
}
}
}
}
game.getRounds().add(round);
roundDao.createRound(round);
}
如果我理解正确,您的问题是在一个用例中(当您响应 API 请求时),您想要检索游戏并响应 API 请求游戏的“gameAnswer”字段已隐藏,但对于其他纯后台操作,您希望在“gameAnswer”字段完好无损的情况下检索游戏。
假设是这样,我认为你唯一真正的问题是你在哪里“空白”了“gameAnswer”字段。
看起来您目前正在存储库的“gameById”方法中执行此操作。这会导致 gameAnswer 在所有情况下都被隐藏,对吗?
因此,解决方案是在控制器方法中清空 gameAnswer。
如果我有这个错误/倒退,我深表歉意,但是您分段发布代码的方式让人难以理解。但无论如何,我相信解决您的问题的方法是只清空实际需要清空的字段。或者,如果您遇到其他一些问题,因为您是在某些共享方法中这样做的,所以它被消隐/未被消隐,也许可以为需要它的用例创建一个新方法。
我正在从事一个项目,该项目涉及使用 JDBC 模板创建 Spring 引导 REST 应用程序以访问我自己创建的数据库 (MySQL)。我正在使用 Postman 来验证端点并通过邮递员使用 JSON 输入数据。我目前的任务是创建一个生成随机 4 位数字的猜谜游戏,非常简单。我的问题是这样的; “ Returns 基于 ID 的特定游戏。确保进行中的游戏不会显示其答案” 我创建了一个满足要求的“入门”方法,但仅限于最基本的级别。一旦对象的字段值更改为“隐藏”,我就无法对对象进行操作,因为它不再是 4 位数字。我想 隐藏 答案,同时仍然能够以功能方式对随机生成的数字进行操作。这是我的基本方法 return:
@Override
public Game gameById(int id) {
Game game = gameDao.getGameById(id);
if (game.getFinished() == false) { // "Hides" the answer
game.setGameAnswer("Hidden");
}
return game;
}
这是我在应用程序中使用上述代码的方法:
@PostMapping("/guess")
public ResponseEntity<Game> play( int id, String guess) {
Game game = service.gameById(id); // Get method
if (game == null) {
return new ResponseEntity(null, HttpStatus.NOT_FOUND);
}
Round round = new Round();
round.setGuess(guess);
service.guess(round, game);
return ResponseEntity.ok(game);
}
有什么想法吗?
编辑:
游戏对象:
public class Game {
int gameId;
String gameAnswer;
Boolean finished;
List<Round> Rounds = new ArrayList<>();
我还将包括数据库游戏 table,我将这些字段存储到:
CREATE TABLE game(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
gameAnswer CHAR(4) NOT NULL,
finished BOOLEAN DEFAULT false
);
为了澄清我的问题,当 运行 postman 中的游戏时,游戏对象及其字段以及游戏答案都会显示。我的目标是 隐藏 这个答案,只要游戏状态显示为“false”。一旦猜中数字,游戏状态将自动设置为真。
这是邮递员 JSON 输出的示例:
{
"gameId": 1,
"gameAnswer": "2651",
"finished": false,
"rounds": [
{
"roundId": 1,
"guess": "1234",
"timeOfGuess": "2021-06-18 09:28:29",
"exactMatch": 0,
"partialMatch": 0,
"gameId": 1
}
]
}
当“Finished”设置为 false 时,我希望游戏答案显示为“Hidden”,但仍然有数值可供操作。
猜测方法:
@Override
public void guess(Round round, Game game) {
// Takes the games generated answer and the user's guess and breaks them down into character array's
round.setGameId(game.getGameId());
char[] gameAnswer = characterBreakDown(game.getGameAnswer());
char[] roundGuess = characterBreakDown(round.getGuess());
// used for comparing the array elements one by one
int min = 0;
int max = 1;
int exact = 0;
boolean run = true;
while (run) {
for (int i = 0; i <= 3; i++) {
if (Arrays.equals(roundGuess, gameAnswer)) {
round.setExactMatch(4);
game.setFinished(true);
gameDao.updateGameById(game);
run = false;
} else if (Arrays.equals(roundGuess, min, max, gameAnswer, min, max)) {
exact++;
round.setExactMatch(exact);
min++;
max++;
if (i == 3 && round.getExactMatch() >= 2) {
round.setPartialMatch(round.getExactMatch());
run = false;
} else if (i == 3) {
run = false;
}
} else if (!Arrays.equals(roundGuess, min, max, gameAnswer, min, max)) {
min++;
max++;
if (i == 3 && round.getExactMatch() >= 2) {
round.setPartialMatch(round.getExactMatch());
run = false;
} else if (i == 3) {
run = false;
}
}
}
}
game.getRounds().add(round);
roundDao.createRound(round);
}
如果我理解正确,您的问题是在一个用例中(当您响应 API 请求时),您想要检索游戏并响应 API 请求游戏的“gameAnswer”字段已隐藏,但对于其他纯后台操作,您希望在“gameAnswer”字段完好无损的情况下检索游戏。
假设是这样,我认为你唯一真正的问题是你在哪里“空白”了“gameAnswer”字段。
看起来您目前正在存储库的“gameById”方法中执行此操作。这会导致 gameAnswer 在所有情况下都被隐藏,对吗?
因此,解决方案是在控制器方法中清空 gameAnswer。
如果我有这个错误/倒退,我深表歉意,但是您分段发布代码的方式让人难以理解。但无论如何,我相信解决您的问题的方法是只清空实际需要清空的字段。或者,如果您遇到其他一些问题,因为您是在某些共享方法中这样做的,所以它被消隐/未被消隐,也许可以为需要它的用例创建一个新方法。