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

问题描述 投票:0回答:1

我试图在弹簧应用中实现摆动,其中弹簧部分工作正常,但是在摆动应用中会出错。这是我正在尝试构建的应用程序(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);
        }
    }
   }

并且链接http://localhost:9596/api/product/findall给了我这个json数据

[{“ id”:1,“名称”:“电话”,“价格”:50.0,“描述”:“ micromax”}]]

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

我试图在弹簧应用中实现摆动,其中弹簧部分工作正常,但是在摆动应用中会出错。这是我正在尝试构建的应用程序(https://www.youtube.com/watch?...

spring-boot retrofit2 okhttp
1个回答
0
投票

Retrofi 2.9.0需要okhttp 3.14.9。在版本3.8.0中,尚未实现方法HttpUrl.get

© www.soinside.com 2019 - 2024. All rights reserved.