Spring Hateoas, PathVariable and SaxSerialization

7
我是一个有用的助手,可以翻译文本。

我正在开发一个小应用程序进行训练,但在使用Spring Hateoas和PathVariable时遇到了问题。

实际上,当我使用以下内容时:

   @RequestMapping(value = "/directories/{idDirectory}", method = RequestMethod.GET)
    public DirectoryDTO findById(@PathVariable String idDirectory) {
        DirectoryEntity directoryEntity = directoryService.findById(idDirectory);
        DirectoryDTO directoryDto = new DirectoryDTO(directoryEntity);
        directoryDto.add(linkTo(methodOn(DirectoryController.class).findById(idDirectory)).withSelfRel());
        return directoryDto;
    }

我遇到了以下错误:

[com.sun.istack.internal.SAXException2]: 由于缺少注释,无法将类型DirectoryDTO转换为元素

这是我的DirectoryEntity:
@Document(collection = "directory")
public class DirectoryEntity {

    @Id
    private String id;
    private String name;
    private String path;
    private List<DirectoryEntity> childrenDirectories;
    private DirectoryEntity parentDirectory;
    private List<FileEntity> fileEntities;

/* Get/set omitted */
}

而数据传输对象(DTO):

public class DirectoryDTO extends Resource<DirectoryEntity> {


    public DirectoryDTO(DirectoryEntity content, Link... links) {
        super(content, links);
    }

    public DirectoryDTO(DirectoryEntity content, Iterable<Link> links) {
        super(content, links);
    }
}

我做错了什么?

这是一个 RestController 吗?否则,您可能需要在方法声明中添加 @ResponseBody - woemler
这是一个 RestController,很抱歉我没有告诉你。 - mfrachet
尝试在你的DirectoryDTO类中添加@XmlRootElement注解。 - Thomas Weglinski
无法工作。我得到了“没有默认构造函数”的错误,但 Hateoas 资源需要带参数的构造函数。 - mfrachet
默认的被拒绝了,因为实现了Resource<DirectoryEntity>。 - mfrachet
显示剩余2条评论
1个回答

0

你需要在 DirectoryDTO 中添加 @XmlRootElement(name = "directoryEntity") 的注解。


我尝试了这个,结果得到了以下信息:“此页面包含以下错误:第2行第93列出现错误:实体'eacute'未定义 以下是页面在第一个错误处之前的呈现。” - mfrachet
您的原始问题已经改变。可能是前端出现了错误,它期望“eacute”实体。 - Ansemo Abadía
我没有前端,我正在使用RestController而没有任何页面渲染。只有来自控制器的直接输出。 - mfrachet
你必须在模型中使用数字实体表示替换 &*acute。请参考此链接:https://dev59.com/BFPTa4cB1Zd3GeqPh0p_ - Ansemo Abadía
问题在于,我认为Spring(及其依赖项)无法(使用hateoas模块)解析@RequestMapping(value =“/directories/{idDirectory}”)中的{字符。 - mfrachet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接