当前位置: 首页 > 知识库问答 >
问题:

如何自定义spring rest控制器的json输出

南门茂才
2023-03-14

我有一个POJO类患者,具有以下特征:

public class Patient implements Serializable{

    private static final long serialVersionUID = 2L;

    private long id;
    private String name;
    private Date dob;
    private String phoneNo;
    private String email;
    private Address address;
    private String username;
    private String password;

....

现在从我的Rest控制器中,我只需要在json中发送患者的姓名、电话号码、电子邮件和地址。我希望json输出为

{
   "check":"Success",
   "details":{
      "name":"Test User",
      "phoneNo":"9876544321",
      "email":"test@gmail.com",
      "address":"Address"
   }
}

此处仅将检查成功/失败添加为标志。

共有3个答案

苏运良
2023-03-14

patientdo.java

public class PatientDTO {
    private Check check;

    @JsonIgnoreProperties(value = {"id", "dob", "username", "password"})
    private Object details;

    /* Getter & Setter */

    public enum Check {
        SUCCESS("Success"),
        FAILURE("Failure");

        private String name;

        Check(String name) {
            this.name = name;
        }

        @JsonValue
        public String getName() {
            return name;
        }
    }
}

控制器演示:

@RestController
@RequestMapping("/test")
public class TestController {

    @GetMapping("/patient")
    public PatientDTO getPatient() {
        PatientDTO patientDTO = new PatientDTO();
        patientDTO.setCheck(PatientDTO.Check.SUCCESS);
        patientDTO.setDetails(new Patient());
        return patientDTO;
    }
}

使用超文本传输协议状态


@JsonInclude(JsonInclude.Include.NON_NULL)
public class Patient {
    private long id;
    private String name;
    private Date dob;
    private String phoneNo;
    private String email;
    private Address address;
    private String username;
    private String password;

    /* Getter & Setter */
}

控制器演示:

@RestController
@RequestMapping("/test")
public class TestController {

    @GetMapping("patient")
    // or @ResponseStatus(HttpStatus.OK)
    public ResponseEntity<Patient> patient() {
        Patient patient = new Patient();
        patient.setId(123);
        patient.setName("123");
        patient.setEmail("demo@demo.com");
        patient.setPassword(null); // set to null to ignore password
        return ResponseEntity.ok(patient);
    }
}

干照
2023-03-14

Spring Boot使用Jackson进行JSON序列化和反序列化,尝试使用@JSonIgnore(com.fasterxml.jackson.annotation.JsonIgnore)。

卫仲卿
2023-03-14

只需创建另一个对象并将其用作restful控制器的响应;

public class PatientResponse implements Serializable {

    private static final long serialVersionUID = 2L;

    private Check check;
    private Detail details;

    // getter, setter, etc

    public static class Detail {

        private String name;
        private String phoneNo;
        private String email;
        private String address;

        // getters, setters, etc
    }

    public enum Check {
        Success, Failure
    }
}
@RestController
public class PatientController {

    @GetMapping(...)
    public PatientResponse get(...) {
        Patient patient = ... // get patient somehow
        return mapPatientToResponse(patient);  // map Patient to PatientResponse here
    }
}
 类似资料:
  • 下面的API接受来自客户端的json字符串,并将其映射到电子邮件对象中。如何将请求正文()作为原始字符串获取?(我需要原始字符串和键入版本的参数) PS:这个问题不是重复的:如何在SpringREST控制器中访问普通json主体?

  • 我明白,对于处理器,我只需在文件夹下的中编写代码,然后从中创建一个nar文件。但是在控制器服务的情况下,我有4个文件夹生成。我可以看到两个java文件。 > 显示在文件夹下 显示在文件夹下 现在,为什么在自定义控制器服务的情况下生成两个java文件,而在自定义处理器的情况下只生成一个java文件。另外,由于我试图模仿服务,其中的java文件中有两个我应该复制服务的原始源代码。 请从头开始指导我创建

  • 我尝试用自定义控制器制作一个自定义组件。自定义组件已经显示在应用程序上,但我未能向其添加属性。 项目结构: null 布尔马尔科 完全错误: 原因:java.lang.nullPointerException:无法调用“javafx.scene.image.imageeview.setimage(javafx.scene.image.image)”,因为“controller.topbarbtn.

  • 控制器定义 ThinkCMF5的控制器完全按 TP5的控制器用法来,但 CMF 封装了几个重要控制器基类,为了更方便开发者,我们建议如果没有特殊需求,自己创建的控制器请最好继承一个基类控制器; 用于 WEB 项目的基类控制器有四个,分别是:BaseController,HomeBaseController,UserBaseController,AdminBaseController 继承关系 th

  • 控制器定义 ThinkCMF6.0的控制器完全按 TP6.0的控制器用法来,但 CMF 封装了几个重要控制器基类,为了更方便开发者,我们建议如果没有特殊需求,自己创建的控制器请最好继承一个基类控制器; 用于 WEB 项目的基类控制器有四个,分别是:BaseController,HomeBaseController,UserBaseController,AdminBaseController, Re

  • 控制器定义 控制器文件通常放在application/module/controller下面,类名和文件名保持大小写一致,并采用驼峰命名(首字母大写)。 一个典型的控制器类定义如下: <?php namespace app\index\controller; use think\Controller; class Index extends Controller { public fu