当前位置: 首页 > 知识库问答 >
问题:

Spring HATEOAS PagedResource在JSON输出中不显示属性或任何链接

牟正真
2023-03-14

谁能告诉我为什么我在JSON中只看到值而不是属性:value。我正在使用下面的代码

@ResponseBody
@RequestMapping(method = RequestMethod.GET, value = "/search")
PagedResources<Resource<Order>> search(@Valid OrderSearch search,
            @SortDefault(sort = "poNumber", direction = DESC) Pageable pageable) {
    Page<Order> orders = orderService.searchOrders(search, pageable);
    return pagedAssembler.toResource(orders);
}

我也没有看到任何链接,也没有发现如果我缺少任何配置,这里是JSON输出

[如何从Spring数据中正确使用PagedResourcesAssembler?

OrderResourceAssembler.java

公共类OrderResourceAssembler扩展ResourceAssemblerSupport

public OrderResourceAssembler() {
    super(OrderController.class, OrderResource.class);
}


/**
 * @see org.springframework.hateoas.ResourceAssembler#toResource(java.lang.Object)
 */
@Override
public OrderResource toResource(Order entity) {
    OrderResource orderResource = null;
    if (entity != null) {
        orderResource = createResourceWithId(
                entity.getPurchaseOrderNumber(), entity);
        orderResource.setPurchaseOrderNumber(entity
                .getPurchaseOrderNumber());
        orderResource.setAmount(entity.getAmount());
        orderResource.setEndUser(entity.getEndUser());
        orderResource.setPartner(entity.getPartner());
        orderResource.setPayload(entity.getPayload());
        orderResource.setProcessStatus(entity.getProcessStatus());
        orderResource.setQuoteNumber(entity.getQuoteNumber());
        orderResource.setQuoteStatus(entity.getQuoteStatus());
        orderResource.setReceivedDate(entity.getReceivedDate());
        orderResource.setRegion(entity.getRegion());
        orderResource.setSalesOrderNumber(entity.getSalesOrderNumber());
        orderResource.setShipTo(entity.getShipTo());
        orderResource.setShipToCustomer(entity.getShipToCustomer());
        orderResource.setType(entity.getType());
    }
    return orderResource;
}

公共类OrderController{

@Autowired
private OrderService orderService;

@Autowired
private OrderResourceAssembler orderAssembler;

@Autowired
private PagedResourcesAssembler<Order> pagedAssembler;

@requestmapping(方法=requestmethod.get,value=“/search”)@responseBody PagedResources search(@valid OrderSearch search,@pageabledefault(page=1,value=integer.max_value)@sortdefault(sort=“ponumber”,direction=sort.direction.desc)可分页可分页){page orders=orderservice.searchOrders(搜索,分页);return pagedassembler.toResource(orders,

当我尝试访问url时,将执行存储库查询,但得到ClassCastException

java.lang.ClassCastException:[ljava.lang.Object;不能在com.mycomp.it.eis.channelTracker.api.resource.orderResourceAssembler.toResource(orderResourceAssembler.java:8)在org.springframework.data.web.pagedResourcesAssembler.creat.springframework.data.web.pagedResourcesAssembler.java:122)在:89)

我不确定问题出在哪里,下面是我的servlet配置

<bean
    class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />

    <bean
        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="webBindingInitializer">
            <bean
                class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
                <property name="conversionService" ref="conversionService" />
            </bean>
        </property>
        <property name="messageConverters">
            <list>
                <bean
                    class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
            </list>
        </property>
        <property name="customArgumentResolvers">
            <list>
                <bean class="org.springframework.data.web.PageableArgumentResolver" />
            </list>
        </property>
    </bean>

   <bean id= "conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean" />

   <bean  class="org.springframework.data.web.PagedResourcesAssembler">
        <constructor-arg>
            <bean class="org.springframework.data.web.HateoasPageableHandlerMethodArgumentResolver" />
        </constructor-arg>
        <constructor-arg>
            <null />
        </constructor-arg>
    </bean>
   <bean class="org.springframework.data.web.config.SpringDataWebConfiguration" /> 

OrderResourceAssembler的bean配置

class="com.mycomp.it.eis.channeltracker.api.resource.OrderResourceAssembler"/>

你能告诉我你缺少什么吗

共有1个答案

公良鸿畅
2023-03-14

用以下类替换OrderResourceAssembler类:

@Component
public class OrderResourceAssembler implements ResourceAssembler<Order, Resource<Order>> {

    @Autowired EntityLinks entityLinks;

    @Override
    public Resource<Order> toResource(Order order) {
        Resource<Order> resource = new Resource<Order>(order);

        final LinkBuilder lb = 
        entityLinks.linkForSingleResource(Order.class, order.getId());

        resource.add(lb.withSelfRel());
        // here is where you have to add you classes represented as links, like partner, endUser, etc.
        resource.add(lb.slash("linkOne").withRel("linkOne"));
        resource.add(lb.slash("linkTwo").withRel("linkTwo"));                                

        return resource;
    }
}
 类似资料:
  • 我正在编写一个简单的示例来测试Flink中CEP的新Scala API,使用最新的Github版本1.1-SNAPSHOT。 Pattern只是一个值的检查,并为每个匹配的模式输出一个字符串作为结果。代码如下: 它在1.1-SNAPSHOT下编译和运行,没有问题,但jobmanager输出没有显示该print()的迹象。即使放松模式条件,只设置“开始”(接受所有事件),也不会返回任何结果。 此外,

  • 我有一个简单的asp.net核心项目,在项目中,任务页面应该显示任务的详细信息——包括任务的类别——但是发生的是任务的类别和用户的用户名没有显示在索引页面上。这是我在github上的存储库链接:https://github.com/mohamedvoli/ToDo/tree/main/TodoList这是我的索引视图: 这是我的控制器: 这是我的模型: 有人能帮忙吗?提前感谢。

  • 我用两个jsp文件和一个控制器构建了一个小servlet。 这是: 这是控制器: 当我在登录jsp页面上输入用户名和密码并点击提交时,这两个属性都显示在URL行中。 这就是我得到的: 我该怎么解决?

  • 问题内容: 如何在hudson / jenkins构建输出控制台中显示超链接(weblink)? 我想要实现的是,在基于特定条件的hudson / jenkins构建过程中,我想显示一个超链接。当用户单击该链接时,它应该打开一个新的浏览器窗口并显示该页面。 有插件可以做到这一点吗?有什么建议吗? 问题答案: 如果输入,例如: 在 Build step Execute shell→Command中,

  • 嵌套异常是com.fasterxml.jackson.databind.jsonMappingException:无法从START_OBJECT令牌反序列化java.lang.String实例

  • 我正在使用swagger工具来记录我基于Jersey的REST API(我正在使用的swaggerui是在2014年6月下载的,我不知道这个问题是否在以后的版本中得到了解决,但由于我对其代码进行了大量定制,所以我没有选择下载最新版本,而无需再次投入大量时间进行定制)。 到目前为止,我所有的传输对象都有一级深度属性(没有嵌入的POJO)。但现在,我添加了一些返回更复杂对象(两级深度)的rest路径,