JAXB - unmarshalling from url(JAXB - 从 url 解组)
问题描述
我正在尝试显示来自该站点的游戏的标题和 ID:http://thegamesdb.net/api/GetGame.php?id=2
I'm tryting to display title and id of game from this site: http://thegamesdb.net/api/GetGame.php?id=2
当我从这个网址解组时:http://www.w3schools.com/xml/note.xml 一切正常,但这里只有一个对象,而不是列表.所以我现在有问题.我正在阅读 Google 的一些教程和示例,并编写了以下代码:
When I was unmarshalling from this url: http://www.w3schools.com/xml/note.xml it was all ok, but here was just one object, not a list. So I'm having problem now. I was reading some tutorials and examples from Google and I made this code:
Data.java:
@XmlRootElement( name = "Data" )
@XmlAccessorType (XmlAccessType.FIELD)
public class Data {
@XmlElement(name = "Game")
List<Game> games;
public List<Game> getGames() {
return games;
}
public void setGames(List<Game> games) {
this.games = games;
}
}
Game.java 文件:
Game.java file:
@XmlRootElement(name = "Game")
@XmlAccessorType (XmlAccessType.FIELD)
public class Game {
private int id;
private String gameTitle;
public int getId(){
return id;
}
public void setId(int id){
this.id = id;
}
public String getGameTitle(){
return gameTitle;
}
public void setGameTitle(String gameTitle){
this.gameTitle = gameTitle;
}
}
控制器:
@RequestMapping(value = "/", method = RequestMethod.GET)
public ModelAndView home(Locale locale) throws MalformedURLException {
ModelAndView model = new ModelAndView("index");
JAXBExample test = new JAXBExample();
Game customer = test.readXML();
model.addObject("customer", customer);
return model;
}
JAXBExample.java:
JAXBExample.java:
public class JAXBExample {
public Game readXML() throws MalformedURLException {
Data customer = null;
Game game = null;
try {
JAXBContext jaxbContext = JAXBContext.newInstance(Data.class);
URL url = new URL("http://thegamesdb.net/api/GetGame.php?id=2");
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
customer = (Data) jaxbUnmarshaller.unmarshal(url);
List<Game> games = customer.getGames();
game = games.get(0);
} catch (JAXBException e) {
e.printStackTrace();
}
return game;
}
}
还有 index.jsp:
And index.jsp:
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<tiles:insertDefinition name="defaultTemplate">
<tiles:putAttribute name="body">
Name: ${customer.gameTitle}<br />
Id: ${customer.id}<br />
</tiles:putAttribute>
</tiles:insertDefinition>
但我的代码不起作用.有人可能知道我做错了什么?因为结果我得到了:
But my code isn't working. Somebody have maybe idea what I'm doing wrong? Because as result I just get:
Name:
Id:
仅此而已.
推荐答案
你的注释唯一有问题的是
The only thing that is wrong with your annotation is
public class Game {
private int id;
@XmlElement(name = "GameTitle") //You need to add this since first letter is uppercase, otherwise the GameTitle will not unmarshall.
private String gameTitle;
... your code ...
}
那么为什么其余的都不起作用?
服务器返回 HTTP 响应代码:403 用于 URL:http://thegamesdb.net/api/GetGame.php?id=2
Server returned HTTP response code: 403 for URL: http://thegamesdb.net/api/GetGame.php?id=2
403 = 禁止
解决方案(让服务器认为你是浏览器)
Solution (make the server believe you are a browser)
URL url = new URL("http://thegamesdb.net/api/GetGame.php?id=2");
HttpURLConnection http = (HttpURLConnection) url.openConnection();
http.addRequestProperty("User-Agent", "Mozilla/4.76");
InputStream is = http.getInputStream();
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
customer = (Data) jaxbUnmarshaller.unmarshal(is);
List<Game> games = customer.getGames();
game = games.get(0);
注意:尝试 catch final
、关闭流并检查 NullPointer
超出了本示例的范围,由用户决定.
Note: Try catch final
, close streams and checking for NullPointer
is beyond this example and up to user.
这篇关于JAXB - 从 url 解组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:JAXB - 从 url 解组
基础教程推荐
- 设置 bean 时出现 Nullpointerexception 2022-01-01
- FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1 2022-01-01
- 减少 JVM 暂停时间 >1 秒使用 UseConcMarkSweepGC 2022-01-01
- Java:带有char数组的println给出乱码 2022-01-01
- Java Keytool 导入证书后出错,"keytool error: java.io.FileNotFoundException &拒绝访问" 2022-01-01
- 如何使用 Java 创建 X509 证书? 2022-01-01
- 降序排序:Java Map 2022-01-01
- 在 Libgdx 中处理屏幕的正确方法 2022-01-01
- “未找到匹配项"使用 matcher 的 group 方法时 2022-01-01
- 无法使用修饰符“public final"访问 java.util.Ha 2022-01-01