Java 如何在用Spring框架实现的REST API中返回JSON,并将其显示为false?

Java 如何在用Spring框架实现的REST API中返回JSON,并将其显示为false?,java,spring,Java,Spring,我有以下控制器: @RestController @RequestMapping("/cities") public class CityController { @Autowired private CityRepository cityRepository; @GetMapping("/{cityId}") public Optional<City> readCity(@PathVariable Integer cityId) {

我有以下控制器:

@RestController
@RequestMapping("/cities")
public class CityController {
    @Autowired
    private CityRepository cityRepository;

    @GetMapping("/{cityId}")
    public Optional<City> readCity(@PathVariable Integer cityId) {
        return cityRepository.findById(cityId);
    }
}
但是当我试图通过给出一个不存在的
cityId
来复制时,我在响应体中得到了
null
结果

我在
pom.xml
中的相关依赖项是:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.1.6.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-rest-webmvc</artifactId>
  <version>${spring.data.rest.webmvc.version}</version>
</dependency>
<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-mongodb</artifactId>
  <version>2.1.3.RELEASE</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.9.7</version>
</dependency>

org.springframework
弹簧芯
5.1.6.1发布
org.springframework.data
spring数据rest webmvc
${spring.data.rest.webmvc.version}
org.springframework.data
spring数据mongodb
2.1.3.1发布
com.fasterxml.jackson.core
杰克逊数据绑定
2.9.7

问题:我想将前面的响应复制为
{“present”:false},如果没有找到资源,这可能是Spring中的默认JSON,如何获得它?

有很多方法可以实现它:自定义
HttpMessageConverters
,自定义
JsonSerializer
,如果使用Jackson

在您的情况下,我会像这样返回一个
ResponseEntity

@RestController
@请求映射(“/cities”)
公共类城市控制器{
@自动连线
私人城市储蓄所城市储蓄所;
@GetMapping(“/{cityId}”)
公共响应就绪城市(@PathVariable Integer cityId){
return cityRepository.findById(cityId)
.map(ResponseEntity::ok)
.orElse(ResponseEntity.ok(Collections.singletonMap(“present”,false)));
}
}

然而,我不喜欢返回像
{“present”:false}

这样的响应,实现它的方法有很多:自定义
HttpMessageConverters
,如果使用Jackson,则自定义
JsonSerializer

在您的情况下,我会像这样返回一个
ResponseEntity

@RestController
@请求映射(“/cities”)
公共类城市控制器{
@自动连线
私人城市储蓄所城市储蓄所;
@GetMapping(“/{cityId}”)
公共响应就绪城市(@PathVariable Integer cityId){
return cityRepository.findById(cityId)
.map(ResponseEntity::ok)
.orElse(ResponseEntity.ok(Collections.singletonMap(“present”,false)));
}
}

然而,我不喜欢返回像
{“present”:false}

城市类由什么组成?城市类由coutry和城市名称组成,与
{“present”:false}无关
既然您没有得到当前字段作为响应,您的代码中发生了什么变化?@MadhuBhat我实际上不记得我所做的更改。但是对于
CityController
类中的当前配置,我无论如何都无法获得“`{”present:false}:问题在于可选对象的序列化。您是否在任何地方使用过objectMapper类?能否添加pom.xml或build.gradle?City类由什么组成?
City
类由coutry和City name组成,这与
{“present”:false}无关
既然您没有得到当前字段作为响应,您的代码中发生了什么变化?@MadhuBhat我实际上不记得我所做的更改。但是对于
CityController
类中的当前配置,我无论如何都无法获得“`{”present:false}:问题在于可选对象的序列化。您是否在任何地方使用过objectMapper类?能否添加pom.xml或build.gradle?谢谢您的回答。但这不是我想知道的。我的意思是,默认情况下返回的结果
{“present”:false}
没有像
Collections这样的硬代码?如果您想要一种简单的方法在需要时返回
{“present”:false}
,我将抛出一个自定义异常
ResourceNotFoundException
,并使用处理程序将异常转换为该响应。谢谢您的回答。但这不是我想知道的。我的意思是,默认情况下返回的结果
{“present”:false}
没有像
Collections这样的硬代码?如果您想要一种简单的方法随时返回
{“present”:false}
,我将抛出一个自定义异常
ResourceNotFoundException
,并使用处理程序将异常转换为该响应。
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.1.6.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-rest-webmvc</artifactId>
  <version>${spring.data.rest.webmvc.version}</version>
</dependency>
<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-mongodb</artifactId>
  <version>2.1.3.RELEASE</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.9.7</version>
</dependency>