Jax-rs:在控制台上使用JSON并打印json

时间:2018-03-20 22:28:58

标签: java jax-rs

我有以下代码在我的本地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 + "]";
    }

}

3 个答案:

答案 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上的其他线程,您就会明白我的意思。