当前位置: 首页 > 知识库问答 >
问题:

Java8,JSP-应该把可选对象放在request.setAtcm()或session.setAtcm()中?

卢朝
2023-03-14

我意识到Java可选Ojbect是不可序列化的。我还意识到,使用Optional object的主要目的是用于方法返回类型。

采用以下方法:

public Phone(){
    public Optional<Phone> getPhone(){
          // some logic goes here to create a new phone object and then put it in optional...
    }
}

在客户端类中,它调用上述方法来检索可选对象,然后将其传递给请求,以便前端JSP页面可以使用此对象:

Optional<Phone> optionalPhone = (new Phone()).getPhone();
// 1. put Optional object in request/session.
request.setAttribute("optionalPhone ", optionalPhone );
// or 2. put Phone object in request/session.
request.setAttribute("phoneObject", optionalPhone.get());

问题:

>

  • 我们应该将请求中的可选对象传递给前端JSP,还是传递可选对象(即Phone对象)的值?

    至于前一个选项,可选是不可序列化的,所以它在分布式系统(会话复制等)中不起作用。如果我错了,请纠正我。

    如果我将Phone对象而不是Optional对象传递给request,这是否意味着我需要使用Optional。get()方法?我听说在使用Optional时,我们应该避免使用isPresent()和get()方法。

    对于#3,是否最好使用以下代码(以避免使用get()方法)?

    //put Phone object in request/session.
    request.setAttribute("phoneObject", optionalPhone.orElseGet(Phone::new));
    
  • 共有1个答案

    蒋俊
    2023-03-14

    >

  • 如果需要设置可选属性,它有什么用?只是不要如果可选

    见1。

    事实并非如此。这种模式更倾向于大致如下:

    getPhone()
        .map(phone -> Request.withPhone(phone))
        .orElse(Request.withoutPhone())
    

    建议不要使用isPresent和get,因为这不是处理可选代码的惯用(声明性)方法。将其与我的(伪科迪什)建议进行比较。

  •  类似资料:
    • 我想做这样的东西: 这将不起作用,因为ifPresent将使用者函数接口作为参数,它具有void accept(t)。它不能返回任何值。还有别的办法吗?

    • 我目前正在使用jdk-9 149测试将Java 8应用程序迁移到Java 9/Jigsaw。 该项目采用标准的Maven目录布局,即具有,,等等。 只要我添加到,maven编译器插件无法抛出NullPointerException。这是因为它也希望找到目录的模块信息。因此,据我所知,有以下几种选择: 将测试类保留在单独的模块中,这意味着它们只能访问主模块的导出包 显然,这两个选项似乎都不可取,所以

    • 我试图模拟一个对象,该对象返回一个带有Mockito的Java可选对象: 当被调用,它返回。 我希望方法返回 返回的任何原因? 方法如下: 以下是Junit:

    • 我们最近将消息处理应用程序从Java7升级到Java8。自升级以来,我们偶尔会发现一个异常,即在读取流时,流已被关闭。日志记录显示终结器线程正在对保存流的对象调用(这反过来会关闭流)。 守则的基本大纲如下: 和是自制的MIME/HTTP库的一部分。扩展,它具有以下特性: 异常发生在的调用链中,如下所示: 写入部件的标题,然后调用 调用我们的实用工具方法将内容流式传输到输出 只返回传入contstr

    • 我有一个API,成功后返回以下响应: 或者在失败时像下面这样: 只有在请求成功时才会指定filename属性,但如果出现错误,则会提供消息。这意味着消息和文件名属性是“可选的”,但结果属性是必需的。 我尝试在定义中定义这个响应对象,如下所示: 但似乎swagger不喜欢“必需”属性,并将显示以下错误消息: 当我看一个来自swagger的例子时,他们有以下布局,其中有两个不同的响应定义,而不是一个。

    • 我们有一个方法,其中我们收到一个