小编Mar*_*idt的帖子

spring-boot-starter-web中的默认JSON错误响应来自何处以及如何调整它?

到目前为止,我对弹簧启动项目非常满意,但我希望能够更深入地了解所有内容是如何粘合在一起的.使用spring-boot-starter-web,spring-boot-starter-data-jpa和hateoas,我能够组装一个漂亮的REST后端.但我想知道它是如何完成的,例如DataIntegrityViolation很好地转换为像这样的JSON输出.我实际上喜欢提供的信息,但我想知道,我如何重用DataObject转换为JSON.我只是不明白,它来自哪里以及配置的位置.希望大家可以帮助我或指出文档的相关部分甚至源代码.

{
  "readyState": 4,
  "responseText": "{\"timestamp\":1423155860435,\"status\":500,\"error\":\"Internal Server Error\",\"exception\":\"org.springframework.dao.InvalidDataAccessResourceUsageException\",\"message\":\"could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet\",\"path\":\"/api/catalog/colorfamilies\"}",
  "responseJSON": {
    "timestamp": 1423155860435,
    "status": 500,
    "error": "Internal Server Error",
    "exception": "org.springframework.dao.InvalidDataAccessResourceUsageException",
    "message": "could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet",
    "path": "/api/catalog/colorfamilies"
  },
  "status": 500,
  "statusText": "Internal Server Error"
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助,Marius

configuration default spring-mvc spring-boot

9
推荐指数
1
解决办法
4791
查看次数

是否有任何REST API查询标准/ DSL来表达GET URL中的复杂过滤器?

我目前正在研究一种优雅的方法,对于我正在开发的REST API,表达对返回集合的GET请求的过滤器.我想将查询表达为" http:// [...]?filter = expressions ",我将在其中评估表达式部分.我有一种感觉,灵活的方法会引发对简单查询DSL的需求吗?到目前为止,我发现的最接近正式规范的是

http://www.juniper.net/techpubs/en_US/junos-space-sdk/13.1/apiref/com.juniper.junos_space.sdk.help/html/reference/Commonbehav.html#step8

我想知道,如果ANTLR是要看的工具吗?但由于这应该是一个普遍的必需品,我想知道,如果有一些REST API查询标准DSL可用吗?

有点困惑的问候和thx为您的输入:)

api rest filtering querydsl antlr4

6
推荐指数
2
解决办法
1747
查看次数

将链接拆解为Spring Hateoas中的实体

也许另一个人偶然发现了这个话题并找到了一个很好的解决方案.在Spring HATEOAS项目的帮助下使用HATEOAS REST方法可以很好地将链接构建到资源.但最后,为了将扁平化资源映射回实体对象树,我需要反汇编链接并查询持久性后端.给出示例,我有一个实体Item,引用ItemType(多对一).item的自然键是ItemType外键和Item代码本身的组合.我使用链接构建器在ItemController中映射的URL是

@RequestMapping("/catalog/items/{itemTypeCode}_{itemCode}")
Run Code Online (Sandbox Code Playgroud)

现在,项目的唯一链接是http://www.sample.com/catalog/items/p_abc123

要反转此链接,我会做一些非常难看的字符串工作:

@Override
public Item fromLink(Link link) {
    Assert.notNull(link);
    String baseLink = linkTo(ColorTypeController.class).toString() + "/";
    String itemTypeAndItemPart = link.getHref().replace(baseLink, "");
    int indexOfSplit = itemTypeAndItemPart.indexOf('_');
    ItemType itemType = new ItemType();
    itemType.setCode(itemTypeAndItemPart.substring(0, indexOfSplit));
    Item item = new Item();
    item.setItemType(itemType);
    item.setCode(itemTypeAndItemPart.substring(indexOfSplit + 1));
    return item;
}
Run Code Online (Sandbox Code Playgroud)

而且我一直在想,如果没有更好的和更灵活的方法(小心任何查询字符串部分,这将打破代码)来做这个逆映射.我实际上不想从控制器中调用另一个MVC控制器,但它会很好,以某种方式利用调度程序servlet反汇编函数将URL解构为更方便使用的东西.对我有什么有用的提示?多谢 :)

spring-mvc spring-hateoas spring-boot

5
推荐指数
1
解决办法
366
查看次数