当前位置: 首页 > 面试题库 >

JAXB-从URL解组

通博实
2023-03-14
问题内容

我正在尝试从以下站点显示游戏的标题和ID:http
://thegamesdb.net/api/GetGame.php?id
=2

当我从以下URL解组时:http :
//www.w3schools.com/xml/note.xml没关系,但这只是一个对象,而不是列表。所以我现在有问题。我正在阅读Google的一些教程和示例,并编写了以下代码:

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文件:

@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:

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:

<%@ 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>

但是我的代码无法正常工作。也许有人知道我在做什么错?因为结果是我得到:

Name:
Id:

仅此而已。


问题答案:

注释唯一的问题是

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 ...
}

那么为什么其余的都不起作用呢?

服务器返回URL的HTTP响应代码:403:http :
//thegamesdb.net/api/GetGame.php?id=2

403 =禁止

解决方案 (使服务器相信您是浏览器)

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);

注意:Try catch final,关闭流并检查NullPointer是否超出本示例的范围,取决于用户。



 类似资料:
  • 问题内容: 有没有最简单的方法来从URL解析JSON?我使用Gson找不到任何有用的示例。 问题答案: 首先,您需要下载URL(作为文本): 然后您需要解析它(这里有一些选项)。 GSON(完整示例): 输出:

  • 问题内容: 我需要构建一个从URL解析域的函数。 因此, 要么 它应该返回 与 它应该返回。 问题答案: 签出: 不能很好地正确处理错误的URL,但是如果您通常期望不错的URL,那很好。

  • 问题内容: 有没有最简单的方法来从URL解析JSON?我使用Gson找不到任何有用的示例。 问题答案: 首先,你需要下载URL(作为文本): 然后你需要解析它(这里有一些选项)。 GSON(完整示例): 输出: 试试json.org上的Java API :

  • 我正在尝试使用JAXB以以下格式散集XML: 我想从user元素开始解组XML。但是,当我尝试使用“@XmlRootElement(name=“user”)”时,我收到以下错误: 这是我的帐户模型类: 服务:

  • 在不使用getter和setter的情况下,JAXB可以正确地解组所提供的JSON。 null和“null”是完全不同的东西,但是我不想在POJO中包含这个字段,并且我必须忽略这些null值。 编辑

  • 所以我有几个XML,我正在尝试解封。 一个XML可以如下所示: 在我的Table类中 } 我从这个链接获取了MapAdapter:JAXB封送和反封送映射到/从 value 我的问题是:我希望能够在传入XML时将记录中的每个标记名(Doc_id/sub_id或XML中的任何内容)及其每个值作为字符串获取,但我不确定如何实现。 如果能给我指明正确的方向,我将不胜感激。 编辑: 2个新问题!我意识到我