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

在JSON响应中获取映射表的其他字段的空值(Spring Boot、REST)

姚建树
2023-03-14

我是Spring Boot和REST API的新手,我正在mysql表中保存一行,为映射表的字段获取带有空值的JSON响应。但字段具有映射表中的值。

我使用Postman以JSON形式发送请求。

我不知道如何获得所有字段的值响应。下面我提到了代码。

控制器类:

@RestController
public class HelpDeskController<T> extends RestUtils<T> {
    @Autowired
    HelpDeskService hService;
    @RequestMapping(value = "/helpDesk/createTicket", method = RequestMethod.POST, headers = "Accept=application/json")
        public @ResponseBody Object setTicket(@Valid @RequestBody HelpDesk ticket) {
            try {
                return getSuccessResponse(hService.setTicket(ticket));
            } catch (StudawnException e) {
                return getErrorResponse(e.getMessage());
            }
        }
}

服务级别:

@Service
    public class HelpDeskServiceImpl implements HelpDeskService {
        @Autowired
        HelpDeskRepository helpDeskRepository;

        @Override
        public Object setTicket(HelpDesk ticket) throws StudawnException {
            if (ticket == null)
                throw new StudawnException(ErrorCode.NULL_REQUEST);
            else {

                return helpDeskRepository.save(ticket);
            }
        }
}

模范班

@Entity
@Table(name = "Help_Desk")
public class HelpDesk {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "ticket_id")
    private int ticketId;

    @JsonBackReference
    @ManyToOne
    @JoinColumn(name = "student_id")
    private Student student;

    @ManyToOne
    @JoinColumn(name = "category_id",nullable=false,updatable=false)
    private Category category;

    @ManyToOne
    @JoinColumn(name = "sub_category_id",nullable=false,updatable=false)
    private SubCategory subCategory;

    @Column(name = "ticket_desc", length = 300)
    private String ticketDesc;

    @Column(name = "status")
    private short status;

    @Column(name = "response", length = 300)
    private String response;

    @Column(name = "date_created", nullable = false, updatable = false)
    private Date dateCreated;

    @Column(name = "date_closed")
    private Date dateClosed;

    public Category getCategory() {
        return category;
    }

    public void setCategory(Category category) {
        this.category = category;
    }

    public SubCategory getSubCategory() {
        return subCategory;
    }

    public void setSubCategory(SubCategory subCategory) {
        this.subCategory = subCategory;
    }

    public int getTicketId() {
        return ticketId;
    }

    public void setTicketId(int ticketId) {
        this.ticketId = ticketId;
    }

    public String getTicketDesc() {
        return ticketDesc;
    }

    public void setTicketDesc(String ticketDesc) {
        this.ticketDesc = ticketDesc;
    }

    public short getStatus() {
        return status;
    }

    public void setStatus(short status) {
        this.status = status;
    }

    public String getResponse() {
        return response;
    }

    public void setResponse(String response) {
        this.response = response;
    }

    public Date getDateCreated() {
        return dateCreated;
    }

    public void setDateCreated(Date dateCreated) {
        this.dateCreated = dateCreated;
    }

    public Date getDateClosed() {
        return dateClosed;
    }

    public void setDateClosed(Date dateClosed) {
        this.dateClosed = dateClosed;
    }

    public Student getStudent() {
        return student;
    }

    public void setStudent(Student student) {
        this.student = student;
    }

}

邮递员中的JSON请求:

{
        "category" : {"categoryId": 1515},
        "subCategory" : {"subCategoryId": 1502},
        "student" : { "studentId":1101},
        "ticketDesc": "Ticket Desc21",
        "status":12,
        "response": "Resp12",
        "dateCreated": "2018-03-12",
        "dateClosed": "2018-04-12"
}

JSON响应:

为映射表中的字段获取空值,但不为用于映射的字段(外键)获取空值。

{
    "response": {
        "ticketId": 22,
        "category": {
            "categoryId": 1515,
            "categoryName": null,
            "createdDate": null
        },
        "subCategory": {
            "subCategoryId": 1502,
            "subCategoryName": null,
            "createdDate": null
        },
        "ticketDesc": "Ticket Desc21",
        "status": 12,
        "response": "Resp12",
        "dateCreated": "2018-03-12T00:00:00.000+0000",
        "dateClosed": "2018-04-12T00:00:00.000+0000"
    },
    "status": 200
}

共有1个答案

荣德厚
2023-03-14

@ResponseBody尝试将其方法的返回值转换为JSON(默认情况下)——通过hs服务返回帮助台对象。setTicket(ticket),Spring将帮助台的所有字段映射到它的JSON值。在您的帮助台类中,您的类别字段来自类型类别,因此类类别的所有字段的命名必须与Spring的JSON字段完全相同,以便能够将它们与getter/setter绑定。

您也可以使用@JSONProperty注释将您的类字段绑定到类别类中的JSON名称:何时使用@JsonProperty属性以及它的用途?

 类似资料:
  • 我已经使用API从API中提取了JSON响应,请放心,它看起来像这样: 现在,我实际的JSON响应在JSON数组中有数千个JSON对象,一些键有空值,例如“secondKey”在一些JSON对象中有空值。我需要获取JSON响应中所有空值的键。对我该如何做有什么想法吗? 我解决这个问题的想法是使用Jackson库反序列化JSON并获取所有空值。然而,考虑到性能,是否有任何有效的解决方案?

  • 将返回响应的控制器类的代码: 下面是具有一对一映射的两个实体类。 我得到的回应是: 如上面的响应所示,我只得到json值,我的意思是只得到没有列名的表值。因此,如何将json响应映射到响应协同响应键上。

  • 我正在尝试使用Jackson将JSON映射到POJO。但是,由于此JSON包含对象的嵌套映射,当我将其反序列化到POJO时,timeseries信息不会转换为POJO。我只能在timeseries块中获取元数据部分和日期部分。timeseries块中的其他字段(如open、high和low)始终为空。 Jackson似乎无法将TimeSeries类中的字段与匹配。有人能告诉我该怎么做,或者给我指出

  • 我有一个名为Trade的实体,它可以映射到包含属性的表。这个实体也有一个字段,存储来自另一个表的值。我的贸易表包含第二个表的主键。我知道如何获得整个第二个表作为实体在我的贸易实体,但我只想要1列。 如你所见,我尝试了,但是连接是在贸易实体的主密钥上执行的。我如何使用注释从贸易表中选择外键,将其连接到第二/第三表,并直接只从col2/col3中获取值?任何建议都很感激 餐桌贸易: 表2: 表3: 现

  • 这里有一个映射,我正在尝试检查数组中的值,如果它找到,则返回;如果它没有找到,则返回预期输出。根据我对和索引的了解,如果(x[index]===y[j]){condition=true}应该进入

  • 问题内容: 我正在尝试使用其开放的API获取特定Subreddit的顶级提交列表: 不幸的是,这不起作用,因为实际的提交列表嵌套在响应中。如何将数据json数组(在元素中)解组为struct 类型的数组? 问题答案: 创建更多模拟JSON确切形状的结构(就像您的结构一样)。解组到最顶层的结构之一,然后访问该结构的适当成员。