我有一个控制器有两种方法。
第一种方法是从具有链接的数据库中获取结果。我没有直接暴露链接,因为我不希望任何用户修改链接并提交请求。
当用户点击链接时,我将在第二种方法中获取搜索结果列表中链接的索引,并且我希望搜索结果在第二种方法中可用。我尝试使用FlashMap
和RequestAttributes
,但我丢失了数据。
我使用Thymleaf搭配弹簧靴1.5.3。以下是示例代码。
class MyObject {
int id;
String docId;
//getters and setters
}
我的控制器
@RestController
public class DataController{
@Autowired
DataService dataService.
@RequestMapping("/search" method=RequestMethod.POST)
public String fetchData(Model model,RequestAttributes rs){
List<MyObject> objectList=dataService.fetchData();
rs.addFlashAttributes("list",dataService.fetchData());
return VIEW_NAME;
}
@RequestMapping("/download/{id}", method=RequestMethod.GET)
public String downloadData(@PathVariable int id,RequestAttributes rs){
rs.getFlashAttribute("list").get(id);
//some logic
}
}
我得到get(id)的空指针异常,因为我无法获取我在方法1中添加的列表。
答案 0 :(得分:0)
当您输入第二个请求的第二个方法时。在第一次调用中设置的所有请求范围数据(包括请求属性)都将丢失。 解决方案可能是使用会话,但对于每个用户,您将存储可能非常大的一些对象的列表。我会考虑其他解决方案:让你的ID到数据库ID在一个地方映射(数据服务)。