2016-11-25 1 views
0

фон

Допустим, у нас есть @RestController со следующим методом (Spring Загрузочный 1.3.5.RELEASE):Как увидеть REST Запрос/Respons весной

@RequestMapping(value = "/helloworld", method = RequestMethod.POST) 
public Map<String, String> helloWorld(@RequestBody Map<String, String> m) { 
    m.put("Hello", "2"); 
    m.put("World", "1"); 
    return m; 
} 

И @Test использованием TestRestTemplate:

RestTemplate restTemplate = new TestRestTemplate(); 

@Test 
public void testHelloWorld() { 
    Map<String, String> request = new HashMap<>(); 
    request.put("Hello", "1"); 
    request.put("World", "2"); 
    Map<String, String> respons = this.restTemplate.postForObject("/helloworld", request, Map.class); 
} 

Вопрос

Как можно напечатать/LOG фактические запрос/RESPONS быть переданных/полученных?

I.e как печатать/записывать серийные версии запрос/ответ?

ответ

0

Это воевавшее на уровне запроса фильтров:

public class YourCustomFilter implements Filter { 

    @Override 
    public void destroy() { 

    } 

    @Override 
    public void init(FilterConfig filterConfig) throws ServletException { 
     // your code here 
    } 

    @Override 
    public void doFilter(ServletRequest request, 
       ServletResponse response, FilterChain chain) 
     throws IOException, ServletException { 

     // your code here 

    } 

} 

Но, вопрос: вы действительно хотите сделать это и из-за чего? Помните, что это действительно склонно к ошибкам.

+0

Я хочу посмотреть, как запрос/RESPONS структурирована таким образом, что я могу, например, ** POST ** с помощью команды _curl_ для тестирования. Нет другой причины. При таком подходе мне просто нужно регистрировать _ServletRespons_ и _ServletRequest_ для достижения желаемого? –

+1

В этом случае вы можете играть с Postman (это расширение хром). Таким образом вы можете очень легко играть с API. Вы не можете напрямую регистрировать запрос/ответ на файл. Вы должны десериализовать эти объекты. – user3659914

0

Вы можете использовать аспект для регистрации запроса и ответа

пример фрагмент запроса:

@Aspect 
@Component 
public class InputLoggerAspect { 

    private static final Logger LOGGER = LoggerFactory.getLogger(InputLoggerAspect.class); 

    @Autowired 
    private ObjectMapper objectMapper; 

    @Before(value = "valueToPointCut") 
    public void before(JoinPoint pointcut) throws Exception { 

     Object[] args = pointcut.getArgs(); 

     for (Object object : args) { 
     LOGGER.info("{}:{}", object.getClass(), objectMapper.writeValueAsString(object)); 
     } 

    } 
}