我正在使用spring-boot-starter-web
,并且我想使用总线的sideNumber
作为Id
的值,并以JSON响应返回此值。
可能很简单,但是我发现的所有内容都与Spring Data Rest有关。
这是我的实体:
@Entity
@Table(name = "buses")
class Bus(
@Id
@JsonProperty("sideNumber")
@JsonInclude
private val sideNumber: Int,
@NotBlank
var longitude: Double,
@NotBlank
var latitude: Double
)
我尝试用sideNumber(Id)
和@JsonInclude
来注释@Jsonproperty
属性,但是没有运气。在我的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>()
}
}
要将此sideNumber(id)
属性包含到JSON响应中,我该怎么办?
答案 0 :(得分:1)
通过将成员财产声明为私有,您是在告诉Kotlin不要为其生成吸气剂。
SpringBoot使用的Jackson,使用getter来序列化对象。
这就是它看不到您的财产的原因。如果看不到该属性,则也不会获得注释。
解决此问题的最简单方法是将其保留为val
,但不设置为私有:val sideNumber: Int
更复杂的方法是创建一个ObjectMapper类型的@Bean并配置Jackson来序列化私有成员,如下所述:https://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-customize-the-jackson-objectmapper
答案 1 :(得分:-1)
我希望您必须扩展RepositoryRestConfigurerAdapter并覆盖configureRepositoryRestConfiguration方法。 如果是,则在暴露对象名称中设置实体类名称。 这样会在json中添加显示ID列。