我正在学习如何通过教程项目实现Rest API。
为了测试标准的CRUD方法,我面临着一个相当奇怪的行为......
以下是代码架构的一般描述:
HashMap<Long, Message>
,其中Message
是我正在操作的实体,
MessageService
,它执行CRUD方法实现的逻辑,MessageRessource
中实例化,这是Rest API,包含调用@GET, @POST, etc...
实例方法的所有MessageService
方法实现。MessageService
构造函数中添加了2个硬编码的消息条目,我将其放入数据库存根HashMap
现在,这里的例程让我感到困惑:
GET
上执行/messages
:显示2个条目,POST
:添加数据,GET
上执行/messages
:显示3个条目,DELETE
上执行/messages/3
:删除第三个条目,GET
上执行/messages
:显示2个条目,DELETE
上执行/messages/2
:在调试应用时,
在messageService
处理MessageRessource
方法后,DELETE
中的GET
实例具有大小为1的哈希图,/messages
上执行GET
:显示2个条目而不是1个。我对这个问题的看法:
DELETE
方法不应该显示3个条目,但是
只有2。POST
确实返回添加的数据的同时Message
?有关代码,请参阅messenger App by AetosAkrivis
中的GitHub公共项目 N.B:我知道这不是一个真正的问题,因为我只需要删除构造函数中的硬编码 function addEventData(auth) {
var sheets = google.sheets('v4');
sheets.spreadsheets.values.append({
auth: auth,
spreadsheetId: spreadsheetId,
range: 'Sheet1!A:B',
valueInputOption:'USER_ENTERED',
insertDataOption:'INSERT_ROWS',
alt:'json'
},
{
values:[['xoxo', '12']]
},
function(err, response){
if(err){
console.log('The api returned an error:'+err);
return
}
console.log(response);
})
}
条目,以便能够正常执行。但我真的很好奇这个例程出现故障的原因。
答案 0 :(得分:1)
您假设JAX-RS容器只会创建一个服务MessageRessource
的实例,但它可以决定清理实例或创建多个实例。每次完成初始化时,静态messages
将更新2个附加条目。结果是不确定的
@Path("/messages")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class MessageRessource {
private MessageService messageService;
public MessageRessource() {
messageService = new MessageService();
}
public MessageService() {
messages.put(1L, new Message(1L,"Hi","Imad"));
messages.put(2L, new Message(2L,"Hello","Badr"));
}
P.S:发布您的代码而不是链接