Retrofit 无法在 swing 应用程序中获取任何 Json 数据?

Retrofit cant able to fetch any Json Data in swing application?

我试图在 spring 应用程序中实现 swing,其中 spring 部分工作正常,但在 swing 应用程序中出现错误。这是我正在尝试构建的应用程序(https://www.youtube.com/watch?reload=9&v=5O-FrvzlBnk)

我收到这个错误 "java.lang.NoSuchMethodError: okhttp3.HttpUrl.get(Ljava/lang/String;)Lokhttp3/HttpUrl; " 在日食中

这是ApiClient.java

    import okhttp3.OkHttpClient;
    import okhttp3.logging.HttpLoggingInterceptor;
    import retrofit2.Retrofit;
    import retrofit2.converter.gson.GsonConverterFactory;
    public class APIclient {

    private static Retrofit retrofit =null;

    public static Retrofit getClient()
    {
        HttpLoggingInterceptor interceptor=new HttpLoggingInterceptor(); 

        interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

        OkHttpClient client=new OkHttpClient()          
              .newBuilder().addInterceptor(interceptor).build();

        System.out.println(client);

        retrofit=new Retrofit.Builder()
                .baseUrl("http://localhost:9596/api/product/findall")
                .addConverterFactory(GsonConverterFactory.create())
                .client(client)
                .build();

        return retrofit;
    }
   }

这是JframeMain.java

import java.awt.EventQueue;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;

import api.APIclient;
import api.ProductAPI;
import entities.Product;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class JFrameMain extends JFrame {

private JPanel contentPane;
private JTable tableProduct;

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {

        @Override
        public void run() {
            try
            {
                JFrameMain frame=new JFrameMain();
                frame.setVisible(true);
            } catch(Exception e)
            {
                e.printStackTrace();
            }               
        }
    });
}

public JFrameMain()
{
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100,100,621,373);
    contentPane=new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    JScrollPane scrollPane = new JScrollPane();
    scrollPane.setBounds(40, 27, 492, 184);
    contentPane.add(scrollPane);

    tableProduct = new JTable();
    scrollPane.setRowHeaderView(tableProduct);
    loadData();
}

private void loadData()
{
    try {
        ProductAPI 
       productAPI=APIclient.getClient().create(ProductAPI.class);
        productAPI.findAll().enqueue(new Callback<List<Product>>() {

            @Override
            public void onResponse(Call<List<Product>> call, 
         Response<List<Product>> response) {
                if(response.isSuccessful())
                {
                    DefaultTableModel defaultTableModel=new 
           DefaultTableModel();
                    defaultTableModel.addColumn("id");
                    defaultTableModel.addColumn("name");
                    defaultTableModel.addColumn("price");
                    defaultTableModel.addColumn("description");
                    for(Product p:response.body())
                    {
                        defaultTableModel.addRow(new Object[] {
                                p.getId(),p.getName(),
                                p.getPrice(),p.getDescription()
                        });
                        System.out.println(p);
                    }

                    tableProduct.setModel(defaultTableModel);
                }

            }

            @Override
            public void onFailure(Call<List<Product>> arg0, Throwable t) {
                JOptionPane.showConfirmDialog(null,t.getMessage());

            }
        });
    } catch (Exception e) {
        JOptionPane.showConfirmDialog(null, e.getMessage());
    }
}

}

这是 ProductApi 接口

import java.util.List;
import entities.Product;
import retrofit2.Call;
import retrofit2.http.GET;

public interface ProductAPI {

    @GET
    Call<List<Product>> findAll();
}

和productController.java

   import org.springframework.http.HttpStatus;
   import org.springframework.http.ResponseEntity;
   import org.springframework.util.MimeTypeUtils;
   import org.springframework.web.bind.annotation.RequestMapping;
   import org.springframework.web.bind.annotation.RequestMethod;
   import org.springframework.web.bind.annotation.RestController;

   import com.demo.entites.Product;
   import com.demo.services.ProductService;

    @RestController
    @RequestMapping("api/product")
    public class ProductController {

    @Autowired
    private ProductService productService;

    @RequestMapping(value="findall",
                    method=RequestMethod.GET,
                    produces = {MimeTypeUtils.APPLICATION_JSON_VALUE},
                    headers = "Accept=application/json")
    public ResponseEntity<Iterable<Product>> findAll(){
        try {
            return new ResponseEntity<Iterable<Product>> 
    (productService.findAll(),HttpStatus.OK);
        } catch (Exception e) {
            return new ResponseEntity<Iterable<Product>>(HttpStatus.BAD_REQUEST);
        }
    }
   }

link http://localhost:9596/api/product/findall 给了我这个 json 数据

[{"id":1,"name":"Phone","price":50.0,"description":"micromax"}]

我正在使用 jdk 1.8,rertofit 2.8.2,okkhttp 3.8.0

Retrofit 2.9.0 需要 okhttp 3.14.9。在版本 3.8.0 中,方法 HttpUrl.get 尚未实现。 可以在 build.gradle 文件中的 GitHub 发布页面 https://github.com/square/retrofit/releases 上查看依赖项。