Java 感知Rest控制器响应
我正在使用SpringBoot构建一个REST服务。我的控制器用Java 感知Rest控制器响应,java,spring,spring-mvc,spring-boot,Java,Spring,Spring Mvc,Spring Boot,我正在使用SpringBoot构建一个REST服务。我的控制器用@RestController注释。出于调试目的,我想截取每个控制器方法生成的响应属性(如果可能)。然后,我希望构造一个新的响应属性,它在某种程度上基于控制器生成的响应属性。最后,新生成的ResponseEntity将替换控制器生成的属性,并作为响应的一部分返回 我只希望在调试应用程序时能够做到这一点。否则,我希望控制器生成的标准响应返回给客户端 例如,我有控制器 @RestController class SimpleContro
@RestController
注释。出于调试目的,我想截取每个控制器方法生成的响应属性
(如果可能)。然后,我希望构造一个新的响应属性
,它在某种程度上基于控制器生成的响应属性。最后,新生成的ResponseEntity
将替换控制器生成的属性,并作为响应的一部分返回
我只希望在调试应用程序时能够做到这一点。否则,我希望控制器生成的标准响应返回给客户端
例如,我有控制器
@RestController
class SimpleController
@RequestMapping(method=RequestMethod.GET, value="/getname")
public NameObject categories()
{
return new NameObject("John Smith");
}
}
class NameObject{
private String name;
public NameObject(name){
this.name = name;
}
public String getName(){ return name; }
}
这将生成响应:
{"name" : "John Smith"}
但我想将响应更改为包含实际响应的状态信息,例如:
{"result": {"name" : "John Smith"}, "status" : 200 }
欢迎使用任何指针。您可以使用spring AOP来实现这一点,例如:
@Aspect
@Component
public class ResponseEntityTamperer {
@Around("execution(* my.package.controller..*.*(..))")
public Object tamperWithResponseEntity(ProceedingJoinPoint joinPoint)
throws Throwable {
Object retVal = joinPoint.proceed();
boolean isDebug = java.lang.management.ManagementFactory.getRuntimeMXBean()
.getInputArguments().toString()
.contains("jdwp");
if(isDebug && retVal instanceof ReponseEntity) {
// tamper with the entity or create a new one
}
return retVal;
}
}
“找出我们是否处于调试模式”的代码来自。我尝试实现这种功能的方法是首先创建一个拦截器。我们可以找到一个例子
其次,我将使用Spring概要文件来确保拦截器只在我需要的概要文件中加载。细节这不是一个简单的调试,但可能会起到作用。您的第一个链接与第二个链接指向同一个目标。对此表示抱歉。修复。您的最佳选择可能是创建一个自定义的
HttpMessageConverter
,以拦截您的响应并将其包装到另一个具有状态代码的对象中。例如: