Java JAXRS,JAXB实现指南
我的要求是:表单提交应该触发LoginServlet,用户名和密码从中传递到UserService.login。如果验证了用户名和密码,则应返回一个用户xml字符串。我需要使用Jaxb或任何其他解析器吗?使用字符串生成器是一个好方法 我将字符串生成器用作:Java JAXRS,JAXB实现指南,java,xml,Java,Xml,我的要求是:表单提交应该触发LoginServlet,用户名和密码从中传递到UserService.login。如果验证了用户名和密码,则应返回一个用户xml字符串。我需要使用Jaxb或任何其他解析器吗?使用字符串生成器是一个好方法 我将字符串生成器用作: StringBuilder validUser = new StringBuilder(); validUser.append("<username>"); validUser.append(username); validU
StringBuilder validUser = new StringBuilder();
validUser.append("<username>");
validUser.append(username);
validUser.append("</username>");
validUser.append("<firstname>");
validUser.append("Jose");
validUser.append("</firstname>");
validUser.append("<lastname>");
validUser.append("Tom");
validUser.append("</lastname>");
validUser.append("</user>");
String result = validUser.toString();
从上面的字符串即结果中,我需要获取/显示firstName,即Jose到UI。
我尝试使用字符串索引,但由于用户名总是变化或用户名长度总是变化,因此无法得到准确的结果。首先,请注意注释,XML解析器确实是正确的方法。 但是,如果您只想快速修复代码,那么现在,这个代码段将提取必要的信息:
Matcher matcher = Pattern.compile("<firstname>(.*?)</firstname>").matcher(result);
matcher.find();
System.out.println(matcher.group(1));
首先,如果这是试图通过StringBuilder生成有效的XML,那么您的方法是有争议的 另请参见Jigar Joshi和fnt对您的问题的评论 有许多API可以通过编程方式构建XMl。在你的情况下,因为这是一个简短的文件,我建议 其次,如果您沉溺于一种宽松的方法,并希望通过这种方法构建伪xml,那么您至少需要在StringBuilder初始化后添加以下行,或者将其作为构造函数的参数:
validUser.append("<user>");
或
最后,要解决您的问题,您可以使用:
String xml = validUser.toString();
System.out.println(
xml.substring(
xml.indexOf("<firstname>") + 11, xml.indexOf("</firstname>")
)
);
使用JAXB实现 部分参考资料包括: 1> 2> 3> 4> User.java:
@XmlRootElement(name = "user")
@XmlType(propOrder = { "userName", "firstName", "lastName" })
public class User{
private String userName;
private String firstName;
private String lastName;
....get/set
@XmlRootElement(name = "status")
@XmlType(propOrder = { "code", "message" })
public class InvalidUser {
private int code;
private String message;
...set/get
}
}
InvalidUser.java:
@XmlRootElement(name = "user")
@XmlType(propOrder = { "userName", "firstName", "lastName" })
public class User{
private String userName;
private String firstName;
private String lastName;
....get/set
@XmlRootElement(name = "status")
@XmlType(propOrder = { "code", "message" })
public class InvalidUser {
private int code;
private String message;
...set/get
}
为什么不使用XML解析器而不是解析基于文本索引的XML?为什么不使用DOM/SAX来处理XML?我可以使用JAXB而不是DOM吗?通常使用JAXB将XML绑定到数据类,但是,如果您有数据,则可以使用任何绑定框架序列化为XML。我的要求是:表单提交应该触发LoginServlet,用户名和密码从中传递到UserService.login。如果验证了用户名和密码,则应返回一个用户xml字符串。这是否意味着,即字符串应该返回意味着我需要创建字符串,或者我可以使用JAXB/DOM?@akb同样,您应该使用序列化器或拖缆或任何适当的数据表示框架来处理XML。从这里到所讨论的对象的字符串表示,它通常非常简单。