Rest 在Spring Boot 1.3和Spring hateoas 0.19中,自定义错误不会呈现为hal
最初,我在项目中使用了SpringBoot1.2和SpringHateOAS,我需要自定义错误消息。所以我创建了我们的类,而不是本机VndError和VndError 我创建了一个扩展VndErrors.VndError的类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
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;
}