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 上查看依赖项。
我试图在 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 上查看依赖项。