Rest 在Spring Boot 1.3和Spring hateoas 0.19中,自定义错误不会呈现为hal

Rest 在Spring Boot 1.3和Spring hateoas 0.19中,自定义错误不会呈现为hal,rest,spring-mvc,spring-boot,spring-hateoas,hal,Rest,Spring Mvc,Spring Boot,Spring Hateoas,Hal,最初,我在项目中使用了SpringBoot1.2和SpringHateOAS,我需要自定义错误消息。所以我创建了我们的类,而不是本机VndError和VndError 我创建了一个扩展VndErrors.VndError的类 public class MyError extends VndErrors.VndError{ //add some my custom fields } 安托弗和她的同学一起把我的错误包起来 public class ErrorDetails{ int t

最初,我在项目中使用了SpringBoot1.2和SpringHateOAS,我需要自定义错误消息。所以我创建了我们的类,而不是本机VndError和VndError

我创建了一个扩展VndErrors.VndError的类

public class MyError extends VndErrors.VndError{
  //add some my custom fields
}
安托弗和她的同学一起把我的错误包起来

public class ErrorDetails{
    int total;

    @JsonProperty("_embedded")
    Map<String, List<MyError>> errors;

   public ErrorDetails(List<MyError> err){
      this.total=err.size();
      errors.put("errors", err); 
   }
}
但是当升级到Spring Boot 1.3时,它就不能正常工作了

\u链接呈现为链接,内容类型为调试信息中的应用程序/json

第一阶段:

我试图创建一个带有
链接的
列表的简单pojo,但它不起作用

public class ErrorDetails{}//pojo includes fields
public class MyError{
  //add some my custom fields
  @JsonUnwrapped
  ErrorDetails content;

  List<link> links;
}

public class ErrorResources{
    int total;

    @JsonProperty("_embedded")
    Map<String, List<MyError>> errors;

   public ErrorResources(List<MyError> err){
      this.total=err.size();
      errors.put("errors", err); 
   }
}
错误结果按预期呈现。但我认为这不是正确的方法,因为我使用了
MediaType.ALL
。这又造成了另一个大问题

我使用
testrestemplate
来测试我的restapi。restTemlate试图将输入数据作为XML处理。我在异常中看到,它表示它试图调用XmlHttpMessageConverter来处理内容(它是json),即使我已经将accept头设置为
application/json
。当然,在我升级到Spring Boot 1.3堆栈之前,它是有效的

第二阶段:

我尝试使用
Resources
Resource
来包装错误结果

public class ErrorDetails{}//pojo includes error description fields

public class ErrorResource extends Resource<ErrorDetails>{
}

public class ErrorResources extends Resources<ErrorResource>{
}

public class ErrorMessage {
  int total;
  ErrorResources errors;
}
public class ErrorDetails{}//pojo包含错误描述字段
公共类ErrorResource扩展了资源{
}
公共类ErrorResources扩展了资源{
}
公共类错误消息{
整数合计;
错误资源错误;
}
Spring仍然无法将错误结果呈现为hal格式,它是application/json。当我加上
@JsonSerialze(using=Jackson2HalModule.HalResourcesSerializer)
ErrorResources
类上,它引发了一个异常,该异常抱怨
HalResourcesSerializer
没有默认构造函数

在@ControllerAdvice类中,我尝试将方法返回类型设置为ErrorMessage和包装器
ResponseEntity
,但它不起作用

public class ErrorDetails{}//pojo includes fields
public class MyError{
  //add some my custom fields
  @JsonUnwrapped
  ErrorDetails content;

  List<link> links;
}

public class ErrorResources{
    int total;

    @JsonProperty("_embedded")
    Map<String, List<MyError>> errors;

   public ErrorResources(List<MyError> err){
      this.total=err.size();
      errors.put("errors", err); 
   }
}
最后,我的问题是如何使
@ControllerAdvice
中的响应主体与普通
@RestController
中的响应主体相同?为什么它在
@ControllerAdvice
类中不起作用

这个问题有简单的解决方法吗

public class ErrorDetails{}//pojo includes error description fields

public class ErrorResource extends Resource<ErrorDetails>{
}

public class ErrorResources extends Resources<ErrorResource>{
}

public class ErrorMessage {
  int total;
  ErrorResources errors;
}