0

我正在尝试将以下 utf-8 编码的 XML 发送到使用 Java 中的 JAX-RS 实现的 rest api。

XML 数据:

<?xml version="1.0" encoding="UTF-8"?>
<incomingData><Text>καλημέρα</Text></incomingData>

然后我尝试使用以下 REST API 调用解析数据:

@PUT()
@Produces(MediaType.TEXT_XML)
@Consumes(MediaType.TEXT_XML)
public void print(@QueryParam("printerID") int printerID,
                  InputStream requestBodyStream) {

    IncomingData StudentData = null;
    try {    
        JAXBContext jaxbContext =
          JAXBContext.newInstance(IncomingData.class);
        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
        StudentData = (IncomingData) jaxbUnmarshaller.unmarshal(requestBodyStream);
    } catch (JAXBException e) {
        e.printStackTrace();
    }

    try {
        System.out.println(new String(StudentData.Text.getBytes(), "UTF-8"));
    } catch (UnsupportedEncodingException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
}

为了轻松解析 XML 内容,我还使用了这个 JAXB 注释类:

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class IncomingData {
    @XmlElement(name = "Text")
    String Text = new String();
}

但是,当我将其内容打印为 UTF-8 编码字符串时, TextXML 标记的内容仍然显示。?????

我该如何解决这个问题?

4

2 回答 2

0

首先确保您的容器编码设置为 UTF-8。其次,尝试将输出写入文件 not to System.out,因为您的输出可能已经是 UTF-8 但您“out”无法显示 UTF-8。

于 2012-10-19T13:16:02.423 回答
0

我想知道是否@Consumes(MediaType.TEXT_XML)会绊倒你,如果你会更好@Consumes(MediaType.APPLICATION_XML)。我相信的编码text/xmlUS-ASCII.


您如何发送 XML 数据?您确定要发送的数据是“UTF-8”编码的吗?我用一个独立的例子尝试了你的模型,一切正常。

演示

package forum12974953;

import java.io.File;
import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(IncomingData.class);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        File xml = new File("src/forum12974953/input.xml");
        IncomingData id = (IncomingData) unmarshaller.unmarshal(xml);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(id, System.out);
    } 

}

input.xml(明确保存为 UTF-8)/输出

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<incomingData>
    <Text>καλημέρα</Text>
</incomingData>
于 2012-10-19T18:47:55.230 回答