嗨,我需要使用Jackson-dataformat XMLMapper从JAVA创建XML.XML应该是这样的
<Customer>
<id>1</id>
<name>Mighty Pulpo</name>
<addresses>
<city>austin</city>
<state>TX</state>
</addresses>
<addresses>
<city>Hong Kong</city>
<state>Hong Kong</state>
</addresses>
</Customer>
Run Code Online (Sandbox Code Playgroud)
但我总是喜欢额外的"<addresses> </ addresses>"标签.
<Customer>
<id>1</id>
<name>Mighty Pulpo</name>
<addresses>
<addresses>
<city>austin</city>
<state>TX</state>
</addresses>
<addresses>
<city>Hong Kong</city>
<state>Hong Kong</state>
</addresses>
<addresses>
</Customer>
Run Code Online (Sandbox Code Playgroud)
我使用下面的代码来创建XML
JaxbAnnotationModule jaxbAnnotationModule = new JaxbAnnotationModule();
XmlMapper mapper = new XmlMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
mapper.registerModule(jaxbAnnotationModule);
mapper.registerModule(new GuavaModule());
String xml = mapper.writeValueAsString(customer);
System.out.println(xml);
Run Code Online (Sandbox Code Playgroud)
有人可以帮帮我吗?如何删除额外的标签呢.我试过使用@XmlElement,但它没有帮助.TIA!
假设我们有几十个代表我的域的java POJO,也就是我系统中的数据,它作为我系统不同层之间的对象流动.该系统可以是Web应用程序,也可以是简单的桌面应用程序.域包含的内容并不重要.
在设计我的系统时,我很困惑我应该放置任何验证逻辑.我的POJO(域对象)代表我的数据,这些对象中的一些字段必须符合某些条件,但如果我在我的setter方法中放入了很多验证逻辑,那么告诉调用客户端的唯一方法是抛出异常.如果我不希望系统崩溃,则异常必须是必须捕获和处理的已检查异常.这样做的结果是每次我使用setter-methods(甚至构造函数)创建一个新对象时,我都会重新抛出该异常或使用try-catch块.在许多setter方法上强制使用try-catch是不对的.
所以问题是我应该把我的验证逻辑放在哪里,这样我就不会在我的代码中混淆大量的样板try-catch块和重新抛出.欢迎最优秀的JAVA字节用户加入讨论.
我已经研究过Google,但没有找到关于这个主题的具体讨论,所以我非常热情地等待,以便更深入地了解事情应该如何完成.
如果一个类包含一个名为"blah"的变量,那么标准的getter/setter语法显然是getBlah()和setBlah().但是如果我有一个名为isBlah的变量的POJO类,我会使用:
public type getIsBlah() {
return isBlah;
}
public setIsBlah(type isBlah) {
this.isBlah = isBlah;
}
Run Code Online (Sandbox Code Playgroud)
或者是这样吗?
public type isBlah() {
return isBlah;
}
public setBlah(type blah) {
this.isBlah = blah;
}
Run Code Online (Sandbox Code Playgroud)
第一种似乎更符合POJO惯例,但第二种类型是IntelliJ生成的,如果我要求它创建一个类'getter/setters(嘿,IntelliJ从来没有让我失望:).那么首选语法是什么?
我开始用spring学习MVC.我听过很多时间Bean,包含了setter和getter.Model基本上是什么数据流动,Pojo哪些是相同的Bean.但是我在这个术语中真的很困惑,所有这些对我来说都是一样的,请你们解释一下这些术语的确切区别.
JAVABEAN
POJO
模型
我正在使用JAXB从XSD文件创建Java对象.我正在创建不可变的包装器来隐藏JAXB生成的对象(之前我正在更新JAXB对象以实现不可变的接口并将接口返回到客户端.但是意识到改变自动生成的类是不好的,因此使用包装器)
目前我将这些不可变的包装器返回给客户端应用程序.是否有任何选项,以便自动生成的类将是不可变的,它将避免创建不可变包装器的额外工作.鼓励采取任何其他方法.
ObjectNode我有一个接受as 的控制器@RequestBody。
这ObjectNode代表json一些用户数据
{
"given_name":"ana",
"family_name": "fabry",
"email": "fabry@gmail.com",
"password": "mypass",
"gender": "FEMALE"
}
Run Code Online (Sandbox Code Playgroud)
控制器.java
@PostMapping(produces = MediaType.APPLICATION_JSON_VALUE)
public JsonNode createUser(@RequestBody ObjectNode user){
return userService.addUser(user);
}
Run Code Online (Sandbox Code Playgroud)
我想让用户将ObjectNode其转换为 JavaPOJO将其保存到数据库并再次将其返回为JsonNode.
UserServiceImpl.java
private final UserRepository userRepository;
private final UserMapper userMapper;
@Override
public JsonNode addUser(@RequestBody ObjectNode user) {
try {
return userMapper.fromJson(user)
.map(r -> {
final User created = userRepository.save(r);
return created;
})
.map(userMapper::toJson)
.orElseThrow(() -> new ResourceNotFoundException("Unable to find user")); …Run Code Online (Sandbox Code Playgroud) 我按照Jersey 2.0文档(https://jersey.java.net/documentation/latest/user-guide.html#json.moxy),修改了pom.xml,包含了jersey-media-moxy工件,编译和安装.我可以为Produces和Consumes案例获得基本的POJO到JSON映射工作.
但是,当我尝试使用复杂数据类型的某些POJO作为资源返回类型时,我得到了很多状态500内部服务器错误但没有任何服务器日志.这很烦人.有人知道这是一个错误还是我错过了一些配置?
顺便说一下,为了对POJO对象使用Moxy映射,POJO需要有一个空参数构造函数.还有其他要求吗?
我有以下XML架构:
<Courses semester="1">
<Course code="A231" credits="3">Intermediate A</Course>
<Course code="A105" credits="2">Intro to A</Course>
<Course code="B358" credits="4">Advanced B</Course>
</Courses>
Run Code Online (Sandbox Code Playgroud)
我需要将其转换为POJO:
public class Schedule
{
public int semester;
public Course[] courses;
}
public class Course
{
public String code;
public int credits;
public String name;
}
Run Code Online (Sandbox Code Playgroud)
这里有两件重要的事情需要注意:
我如何需要注释我的对象才能让FasterXML反序列化这个xml?