【问题标题】:Dumping entity in Spring Boot在 Spring Boot 中转储实体
【发布时间】:2019-06-17 13:48:52
【问题描述】:

我正在使用带有 Kotlin 的 Spring Boot,并希望将实体转储到浏览器。

Entities.kt:

@Entity
class Person(
    var name: String,
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY) var id: Long? = null
)

@Entity
class Cat(
    var name: String,
    @ManyToOne var ownedBy: Person,
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY) var id: Long? = null
)

HtmlController.kt:

@Controller
class HtmlController(private val repository: CatRepository) {

    @GetMapping("/")
    fun index(model: Model): String {
        model["cats"] = repository.findAll()
        return "index"
    }
}

在我的index 模板中,我可以使用{#cats}{/cats} 循环遍历cats,但我想将所有内容都转储出去(例如,查看哪些关系可用)。那可能吗?我尝试将上面的控制器修改为return respository.findAll().toString(),但这给了我错误:

出现意外错误(类型=未找到,状态=404)。

【问题讨论】:

    标签: spring-boot jpa kotlin


    【解决方案1】:

    当从Controller 返回String 时,Spring MVC 将假定您指向一个视图文件。因此它会在某个已配置的文件夹中查找文件,其中文件名是Cats 列表的字符串表示形式。当然,这不存在,您会得到 404。

    执行此操作的最简单方法是创建“REST 样式”端点,并将数据作为合适的数据格式返回,例如 json.我的示例是使用 Java,但您可以转换为 Kotlin:

    @RestController
    public class CatRestController {
    
        @Autowired
        private CatRepository repository;
    
        @RequestMapping(path = "/cats", method = RequestMethod.GET)
        public List<Cat> getAllCats() {
            return repository.findAll();
        }
    }
    

    Spring Boot 应该自动将列表转换为 json。如果移动到现有的 Spring MVC 控制器,该方法可能会起作用,但我还没有测试过。我有一个来自常规 Spring MVC 项目(不是 Spring Boot)的示例,方法签名如下所示:

    @RequestMapping("/cats.json")
    public @ResponseBody List<Cat> getCats() {
    

    【讨论】:

    • 另一个提示:使用将 json 转换为漂亮打印的 json 的浏览器插件 :)
    猜你喜欢
    • 2017-11-24
    • 1970-01-01
    • 2020-07-04
    • 2018-06-21
    • 2019-03-09
    • 2019-03-18
    • 2019-01-04
    • 2015-12-22
    • 2018-02-15
    相关资源
    最近更新 更多