package utils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class Urlpicture {
public String get_main_url(int num) {
String jpgurl = null;
try{
String url = "https://www.zigbang.com/items1/"+num;
jpgurl = "http://z1.zigbang.com/items/7697786/538ec7a16033f0c32eac29ac50deb04a1e6bf3ba.jpg?h=800&q=60";
Document doc = Jsoup.connect(url).get(); // this part require try catch
jpgurl = doc.select("img[src$=.jpg?h=800&q=60]").get(0).absUrl("src");
System.out.println(url);
System.out.println(jpgurl);
}catch(Exception e){
e.printStackTrace();
}
return jpgurl;
}
}
從Jsoup Connect獲取文檔。 但是,如果Jsoup.connect提供了一個錯誤。我想 jgurl作爲別的東西,並繼續運行代碼。 是不可能的? (此代碼將稱爲多的時間從外部,但如果出現異常。它停止)如果忽略發生返回別的東西?
外源調用此urlpicture
@RequestMapping("/search")
public ModelAndView searchHandler() throws JsonProcessingException {
ModelAndView mav = new ModelAndView("t_search");
List<HashMap<String, Object>> mlist = rd.test_room();
//=====================================================
List<String> urlcol = new ArrayList<>();
JSONArray json_arr=new JSONArray();//
for (Map<String, Object> map : mlist) {
JSONObject json_obj=new JSONObject();
String url = null;
System.out.println(map.get("SELL_NUM"));
int num = Integer.parseInt(map.get("SELL_NUM")+"");
String str = (urp.get_main_url(num).toString());// this calling the function
System.out.println(str);
}
urlcol.add(url);
for (Map.Entry<String, Object> entry : map.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
try {
json_obj.put(key,value);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
(json_arr).put(json_obj);
}
=============== ============================================修復後
@RequestMapping("/search")
public ModelAndView searchHandler() throws JsonProcessingException {
ModelAndView mav = new ModelAndView("t_search");
List<HashMap<String, Object>> mlist = rd.test_room();
List<String> urlcol = new ArrayList<>();
JSONArray json_arr=new JSONArray();
for (Map<String, Object> map : mlist) {
JSONObject json_obj=new JSONObject();
String url = null;
String input = null;
System.out.println(map.get("SELL_NUM"));
int num = 0;
num = Integer.parseInt(map.get("SELL_NUM")+"");
input = "https://www.zigbang.com/items1/"+num;
System.out.println(input);
try{
url= (urp.get_main_url(input));
System.out.println(url);
}catch(Exception e){
System.out.println("No=");
e.printStackTrace();
url = "http://z1.zigbang.com/items/7697786/538ec7a16033f0c32eac29ac50deb04a1e6bf3ba.jpg?h=800&q=60";
}
@Service
public class Urlpicture {
public String get_main_url(String url) {
Document doc;
String jpgurl = null;
try{
jpgurl = "http://z1.zigbang.com/items/7697786/538ec7a16033f0c32eac29ac50deb04a1e6bf3ba.jpg?h=800&q=60";
jpgurl = Jsoup.connect(url).get().select("img[src$=.jpg?h=800&q=60]").get(0).absUrl("src");
}catch(Exception e){
e.printStackTrace();
}finally{
return jpgurl;
}
================================================== =================== 修復後,它會在異常後繼續運行。 但即使url鏈接存在與有效數字 它將返回所有值作爲例外。
7666495
https://www.zigbang.com/items1/7666495// this link is valid but throw exception
No=
java.lang.NullPointerException
at controller.main_controller.searchHandler(main_controller.java:54)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springf
我不知道爲什麼這樣保持拋出異常的所有值
從try段移動jgurl的聲明,否則它的作用域僅限於它,它不能在catch中被訪問。你可以在嘗試之前聲明它,給它默認值(錯誤消息),如果try部分將被執行沒有問題,它也會將jgurl更新爲適當的值。 – Pshemo
我改變了我的代碼。 –
@manjoojo不改變你的代碼,如果它改變你的問題 – QBrute