接受休息控制器响应

时间:2015-07-09 11:08:28

标签: java spring spring-mvc spring-boot

我正在使用spring boot构建REST服务。我的控制器注释了@RestController。出于调试目的,我想拦截每个控制器方法生成的ResponseEntity(如果可能)。然后我希望构建一个新的ResponseEntity,它有点基于控制器生成的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 }

这将生成响应:

enum MyEnum {
  case `Self`
  case AnotherCase
}

但我想更改响应以包括实际响应的状态信息,例如:

let x: MyEnum = .Self
let y = MyEnum.`Self`

任何指示赞赏。

2 个答案:

答案 0 :(得分:2)

我尝试实现这种功能的方法首先是创建一个拦截器。可以找到示例here

其次,我将使用Spring配置文件来确保拦截器仅在我需要的配置文件中加载。详细信息here。这不是特别的调试,但可能会做到这一点。

答案 1 :(得分:0)

您可以使用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;
    }
}

&#34>了解我们是否处于调试模式"代码来自this answer

相关问题