我有以下代码在我的本地eclipse设置上工作,它接受JSON并使用这个在控制台上打印它
System.out.println(person);
因为toString
类中有Person.java
方法,为了查看输出,我必须传递JSON。
以下方式通过POSTMAN
{"name":"Mickey","surname":"Mouse"}
这将在控制台上打印以下内容:
16:05:16,409 INFO [stdout] (default task-4) Person [name=Mickey, surname=Mouse]
MyQuestion:
如果我必须接受如下的有效JSON:
[{
"name": "FirstName",
"value": "Mickey"
}, {
"name": "LastName",
"value": "Mouse"
}]
是否可以在toString
类中使用除Person.java
类之外的其他方法,它将在控制台上打印上述JSON?
HelloWorldApplication.java
package com.thejavageek.jaxrs;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/rest")
public class ExampleApplication extends Application {
}
HelloWorldService.java
package com.mypackage.jaxrs;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import com.mypackage.jaxrs.model.Person;
@Path("/HelloWorld")
public class HelloWorldService {
@POST
@Path("/writePersonToDB")
@Consumes(MediaType.APPLICATION_JSON)
public void writePersonToDB(Person person) {
System.out.println(person);
}
}
Person.java
package com.mypackage.jaxrs.model;
public class Person {
private String name;
private String surname;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
@Override
public String toString() {
return "Person [name=" + name + ", surname=" + surname + "]";
}
}
答案 0 :(得分:0)
一如既往,Mkyong有答案。看看他的帖子here。
简而言之,您需要将Java对象序列化为String。该框架将允许您使用XML或JSON(这是您正在寻找的)。你使用杰克逊进行漂亮的印刷。
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(person));
注意:其他帖子引用的是GSON,它是Java中JSON的另一个库。
答案 1 :(得分:0)
首先:您的方法public void writePersonToDB(Person person)
不会像您定义的那样接受输入
[{
"name": "FirstName",
"value": "Mickey"
}, {
"name": "LastName",
"value": "Mouse"
}]
它是一个数组或列表,所以你必须有一个方法接受Array
或更好的List<Person>
作为输入
第二:是什么阻止你创建一个方法来打印你需要的格式的输入(无论是Person
还是List<Person>
)?如果你想用JSON格式打印,请使用@ david-brossard来做到这一点。如果您想要Person.toString()
建立自己的另一种格式......一切都取决于您。
答案 2 :(得分:0)
我有以下代码在我的本地eclipse设置上工作 接受JSON并使用它在控制台上打印它 的System.out.println(人); -
如果我没有弄错的话,当你到达这一行System.out.println(person);
时,JSON正被转换为Java对象。并且所有Java对象都有一个toString()
方法,在您尝试时调用该方法,在您的情况下,在控制台中打印对象。
是否可以使用除了toString方法之外的其他东西 Person.java类将在控制台上打印上述JSON吗?
toString()
只是将对象转换为字符串的一种方式。但我建议你不要急于寻找其他解决方案,但你可以这样简单地覆盖它:
public String toString() {
StringBuilder sb = new StringBuilder("Person:\n");
sb.append("name: ").append(this.getName()).append("\n")
append("surname: ").append(this.getSurname()).append("\n");
return sb.toString();
}
或者,如果您希望这与您所说的一样
[{ “name”:“FirstName”, “价值”:“米奇”},{ “name”:“LastName”, “价值”:“鼠标”}]
您始终可以相应地使用toString()
对象修改StringBuilder
方法。
请尝试,也许你会对结果更满意。
如果这不能满足你,那么你可以看看杰克逊的漂亮印刷品。为此,只需检查stackOverflow上的其他线程,您就会明白我的意思。