小编Dan*_*ner的帖子

Java映射函数抛出非静态方法编译器错误

我有一个奇怪的问题,尽管有很多关于该主题的问题,但我仍在努力理解 Java 中“静态上下文”的本质。

长话短说:

我有一个设计缺陷,其中...

这有效:

List<OrderExtnTrans> list = orderType.getOrderExtnTransList();
this.dtoOrderExtnTransList = list.stream().map(OrderExtnTrans::toDto).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

但这并不:

this.dtoOrderExtnTransList = orderType.getOrderExtnTransList().stream().map(OrderExtnTrans::toDto).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

问题 第二个版本中显示的错误是“无法从静态上下文引用非静态方法”。

长版本:

对象模型:该模型由特定于业务类型的订单(例如股票交易、支付)组成,这些订单通过“InheritanceType.JOINED”继承策略从订单实体继承。父订单可以使用该订单的业务类型特定的 DTO 对象进行参数化,例如 DtoStockExchangeOrder。这是为了使 JPA 对象可以映射到实体中的 DTO 等效项,而不是在服务中(我之前就是这么做的。它有效,但“不太干净”)。

JPA订单:

@Entity
@Table(name = "ORDER_BASE")
@Inheritance(strategy = InheritanceType.JOINED)
public class Order<DtoOrderType extends DtoOrder> implements Serializable {

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "order", orphanRemoval = true)
    private List<OrderExtnTrans> orderExtnTransList = new ArrayList<>();

}
Run Code Online (Sandbox Code Playgroud)

JPA 订单 - 业务类型具体示例:

@Entity
@Table(name = "ORDER_STEX")
@Inheritance(strategy = InheritanceType.JOINED)
public class OrderStex extends Order<DtoOrderStex> implements Serializable {
Run Code Online (Sandbox Code Playgroud)

同样,DTO 订单遵循相同的模式,可以使用业务类型特定的 …

java spring dictionary hibernate jpa

6
推荐指数
1
解决办法
793
查看次数

带有 webpack 的 Vue.js 不提供压缩的 GZIP .js 文件

我的服务器不向客户端提供 GZIPd JavaScript 文件。

我有一个简单的 Vue.js 应用程序,托管在 Heroku 上。当我在控制台中通过“npm run build”构建网站时,它会按照我的预期为每个 JavaScript 文件填充 4 个文件,并填充 /dist/js 目录。

例如:

chunk-vendors.e26db277.js
chunk-vendors.e26db277.js.gz
chunk-vendors.e26db277.js.map
chunk-vendors.e26db277.js.map.gz
Run Code Online (Sandbox Code Playgroud)

为了启用压缩,我使用以下命令安装了 webpack:

    npm install --save-dev compression-webpack-plugin
Run Code Online (Sandbox Code Playgroud)

然后我将vue.config.js设置为以下内容:

    const CompressionPlugin = require('compression-webpack-plugin');

    module.exports = {
      chainWebpack(config) {
        config.plugins.delete('prefetch');


        config.plugin('CompressionPlugin').use(CompressionPlugin);
      }
    };
Run Code Online (Sandbox Code Playgroud)

基本上我遵循了本教程: https://medium.com/@aetherus.zhou/vue-cli-3-performance-optimization-55316dcd491c

当我在浏览器中检查 HTTP 请求时,它说它接受 gzip:

Accept-Encoding: gzip, deflate, br
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,让服务器实际传送 .gz 文件。

在教程中它说“这样一个静态网站的服务器块看起来像这样:

    server {
      listen 80;
      server_name www.example.io;  
      root /path/to/the/directory;
      index index.html;
      gzip_static on;

      location /index.html {
        etag on;
      }
      location / {
        etag …
Run Code Online (Sandbox Code Playgroud)

javascript gzip node.js webpack vue.js

4
推荐指数
1
解决办法
1万
查看次数

Spring Boot Jackson ResponseEntity 找不到类的序列化器

我的 Spring Boot 控制器有一个奇怪的错误,没有返回最近创建的对象。

我有一个控制器,有两种方法(见下文)。只需检索“OrderPay”类的对象并将其作为响应实体的有效负载返回即可。这工作正常,因此该对象没问题。

另一个创建并保留“OrderPay”的新实例,然后返回该新创建的对象。新对象的创建及其持久化工作正常。但是,当我尝试退货时,我收到以下错误消息。

现在,如果错误消息持续出现,我就能理解了。但是,当使用第一个函数(“getPaymentByIdTest”)返回这个新创建的对象时,它返回它没有问题,即使我以完全相同的方式从数据库检索它并以相同的方式返回它,具有相同的返回类型该方法的。

现在我知道在 HTTP-GET 方法中执行代码并不是最佳实践,但它更快、更方便测试。

谁能看到我需要在哪里调整代码?

2020-04-13 21:37:57.507 ERROR 26796 --- [nio-8081-exec-2] oaccC[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] 在上下文中path[]抛出异常[请求处理失败;嵌套异常是 org.springframework.http.converter.HttpMessageConversionException: 类型定义错误: [简单类型, 类 org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor]; 嵌套异常是 com.fasterxml.jackson.databind.exc.InvalidDefinitionException:找不到类 org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor 的序列化程序,并且没有发现创建 BeanSerializer 的属性(为避免异常,请禁用 SerializationFeature.FAIL_ON_EMPTY_BEANS)(通过参考链: com.brownbag_api.model.OrderPay["posSend"]->com.brownbag_api.model.Pos$HibernateProxy$7l7MDMEi["hibernateLazyInitializer"])] 其根本原因

com.fasterxml.jackson.databind.exc.InvalidDefinitionException:找不到类 org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor 的序列化器,并且没有发现创建 BeanSerializer 的属性(为避免异常,请禁用 SerializationFeature.FAIL_ON_EMPTY_BEANS)(通过引用链: com.brownbag_api.model.OrderPay["posSend"]->com.brownbag_api.model.Pos$HibernateProxy$7l7MDMEi["hibernateLazyInitializer"])

  1. 控制器
@CrossOrigin(origins = "*", maxAge = 3600)
@RestController
@RequestMapping("/api/pay")
public class PaymentController {

    @Autowired
    private OrderPayRepo orderPayRepo;

    @Autowired
    private OrderPaySvc orderPaySvc;

    @GetMapping("/{id}")
    public ResponseEntity<?> getPaymentByIdTest(@PathVariable Long id) {
        Optional<OrderPay> orderPay = orderPayRepo.findById(id);
        return ResponseEntity.ok(orderPay);
    } …
Run Code Online (Sandbox Code Playgroud)

java spring jpa jackson spring-boot

1
推荐指数
1
解决办法
1万
查看次数

具有通用返回类型的Java方法

Java中是否有一种方法可以通过一个方法的声明返回不同的类型?

public Object loadSerialized(String path) {
    Object tmpObject;

    try {
        FileInputStream fis = new FileInputStream(path);
        ObjectInputStream ois = new ObjectInputStream(fis);
        tmpObject = (Object) ois.readObject();

        ois.close();
        fis.close();

        return tmpObject;
    } catch (FileNotFoundException e) {
        return null;
    } catch (Exception e) {
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望该方法返回一个对象,然后在函数调用中将其云转换为正确的类型。那是我的想法,但它不能像这样工作。我需要某种通用的返回类型来做到这一点吗?解决这个问题的最佳方法是什么?

java generics casting return-type generic-method

0
推荐指数
2
解决办法
4095
查看次数