Spring引导包含json中的ID字段
我正在使用Spring引导包含json中的ID字段,json,spring,spring-boot,kotlin,jackson,Json,Spring,Spring Boot,Kotlin,Jackson,我正在使用springbootstarterweb,我想使用总线的sideNumber作为Id值,并以JSON格式返回该值 可能很简单,但我发现的一切都与Spring数据Rest有关 这是我的实体分类: @Entity @Table(name = "buses") class Bus( @Id @JsonProperty("sideNumber") @JsonInclude private val sideNumber: Int,
springbootstarterweb
,我想使用总线的sideNumber
作为Id
值,并以JSON格式返回该值
可能很简单,但我发现的一切都与Spring数据Rest有关
这是我的实体分类:
@Entity
@Table(name = "buses")
class Bus(
@Id
@JsonProperty("sideNumber")
@JsonInclude
private val sideNumber: Int,
@NotBlank
var longitude: Double,
@NotBlank
var latitude: Double
)
我试图用@JsonInclude
和@Jsonproperty
注释侧号(Id)
属性,但没有成功。在JSON响应中,我只得到经度和纬度
我的控制器如下所示:
@RestController
@RequestMapping("/api")
class BusController {
@Autowired
private lateinit var busRepository: BusRepository
@GetMapping("/buses")
fun getAllBuses(): List<Bus> {
return busRepository.findAll()
}
@PostMapping("/buses")
fun createBus(@Valid @RequestBody bus: Bus): Bus {
return busRepository.save(bus)
}
@GetMapping("/buses/{sideNumber}")
fun getBusById(@PathVariable(value = "sideNumber") sideNumber: Long): Bus {
return busRepository.findById(sideNumber)
.orElseThrow { ResourceNotFoundException("Bus", "sideNumber", sideNumber) }
}
@PutMapping("/buses/{sideNumber}")
fun updateBus(@PathVariable(value = "sideNumber") sideNumber: Long,
@Valid @RequestBody newBus: Bus): Bus {
val bus = busRepository.findById(sideNumber)
.orElseThrow { ResourceNotFoundException("Bus", "sideNumber", sideNumber) }
bus.latitude = newBus.latitude
bus.longitude = newBus.longitude
return busRepository.save(bus)
}
@DeleteMapping("/buses/{sideNumber}")
fun deleteBus(@PathVariable(value = "sideNumber") sideNumber: Long): ResponseEntity<*> {
val bus = busRepository.findById(sideNumber)
.orElseThrow { ResourceNotFoundException("Bus", "sideNumber", sideNumber) }
busRepository.delete(bus)
return ResponseEntity.ok().build<Any>()
}
}
@RestController
@请求映射(“/api”)
类总线控制器{
@自动连线
私有lateinit var busRepository:busRepository
@GetMapping(“/bus”)
fun getallbus():列表{
返回busRepository.findAll()
}
@后映射(“/总线”)
fun createBus(@Valid@RequestBody-bus:bus):总线{
返回busRepository.save(总线)
}
@GetMapping(“/bus/{sideNumber}”)
fun getBusById(@PathVariable(value=“sideNumber”)sideNumber:Long):总线{
返回busRepository.findById(sideNumber)
.orelsetrow{ResourceNotFoundException(“总线”,“侧号”,侧号)}
}
@PutMapping(“/bus/{sideNumber}”)
fun updateBus(@PathVariable(value=“sideNumber”)sideNumber:Long,
@有效@RequestBody newBus:Bus):总线{
val bus=busRepository.findById(sideNumber)
.orelsetrow{ResourceNotFoundException(“总线”,“侧号”,侧号)}
bus.LATIONE=NEBUS.LATIONE
bus.longitude=newBus.longitude
返回busRepository.save(总线)
}
@DeleteMapping(“/bus/{sideNumber}”)
fun deleteBus(@PathVariable(value=“sideNumber”)sideNumber:Long):ResponseEntity{
val bus=busRepository.findById(sideNumber)
.orelsetrow{ResourceNotFoundException(“总线”,“侧号”,侧号)}
busRepository.delete(总线)
返回ResponseEntity.ok().build()
}
}
要将此
sideNumber(id)
属性包含到JSON响应中,我必须做些什么?通过声明成员属性private,您告诉Kotlin不要为其生成getter。SpringBoot使用的Jackson使用getter序列化对象。
这就是为什么它看不到你的财产。如果没有看到属性,也不会得到注释。
解决此问题的最简单方法是将其保留为
val
,但不要将其设置为私有:val sideNumber:Int
更复杂的方法是创建ObjectMapper类型的@Bean,并将Jackson配置为同时序列化私有成员,如下所述:ooman我没有注意到这个私有修饰符…:(这个领域不必是私人的。谢谢你的敏锐洞察力。多么愚蠢的错误。。。