gpt4 book ai didi

java - 如何在 ResponseEntity 中不返回空值?

转载 作者:行者123 更新时间:2023-12-02 19:07:08 29 4
gpt4 key购买 nike

我使用 ResponseEntity 为 GET“api/v1/name”和 POST“api/v1/name”请求返回响应。

我的目标是不返回空值的响应,例如在 POST "api/v1/name"请求中,当前响应正文将是:

{
"id": null,
"name": "who",
"newid": "A8C90A53-78F6-4BD6-9628-CBA8FC349C08"
}

我希望它看起来像:

{
"name": "who",
"newid": "A8C90A53-78F6-4BD6-9628-CBA8FC349C08"
}

在我看来,使用下面这段代码重新创建对象只会降低代码的可读性并且可能会占用更多内存(我不确定,如果我错了请告诉我):

...
Map<String, String> responseBody = new HashMap<>();
responseBody.put("name", nameModel.getName());
responseBody.put("newid", nameModel.getNewId());

return new ResponseEntity<>(responseBody, HttpStatus.OK);

==== 下面是完整的存储库,如果您想查看更新的存储库:https://github.com/kidfrom/g2_java/tree/main/etc/mssqlserver

Controller /NameController.java

package com.example.mssqlserver.controller;

import com.example.mssqlserver.mapper.NameMapper;
import com.example.mssqlserver.model.NameModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
public class NameController {

@Autowired
private NameMapper nameMapper;

@GetMapping("api/v1/name")
public ResponseEntity<?> selectAll() {
return new ResponseEntity<>(nameMapper.selectAll(), HttpStatus.OK);
}

@PostMapping("api/v1/name")
public ResponseEntity<?> insert(@RequestBody NameModel nameModel) {

// validator
if (!nameModel.requestIsValid()) {
return ResponseEntity.badRequest().build();
}

if (nameMapper.insert(nameModel) == 1) {
return new ResponseEntity<>(nameModel, HttpStatus.OK);
} else {
return ResponseEntity.badRequest().build();
}
}
}

映射器/NameMapper.java

package com.example.mssqlserver.mapper;

import com.example.mssqlserver.model.NameModel;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface NameMapper {

@Select("SELECT * FROM name")
public List<NameModel> selectAll();

@SelectKey(statement = "SELECT NEWID()", keyProperty = "newid", resultType = String.class, before = true)
@Insert("INSERT INTO name (name, newid) VALUES (#{name}, #{newid})")
// @Options(useGeneratedKeys = true, keyProperty = "id")
int insert(NameModel nameModel);
}

模型/NameModel.java

package com.example.mssqlserver.model;

public class NameModel {
private Integer id;
private String name;
private String newid;

public NameModel(Integer id, String name, String newid) {
this.id = id;
this.name = name;
this.newid = newid;
}

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public String getNewid() {
return newid;
}

public void setNewid(String newid) {
this.newid = newid;
}

public boolean requestIsValid() {
if (this.name.isEmpty()) return false;

return true;
}
}

最佳答案

我认为这个简单的解决方案可以帮助您

https://stackoverflow.com/a/36515285/5108695

由于正在使用 Jackson,您必须将其配置为 Jackson 属性。对于 Spring Boot REST 服务,您必须在 application.properties 或 application.yml 中配置它:

spring.jackson.default-property-inclusion = NON_NULL

关于java - 如何在 ResponseEntity 中不返回空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64868946/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com