Kaip nustatyti turinio ilgį pavasario MVC REST JSON?

Turiu kodą:

 @RequestMapping(value = "/products/get", method = RequestMethod.GET) public @ResponseBody List<Product> getProducts(@RequestParam(required = true, value = "category_id") Long categoryId) { // some code here return new ArrayList<>(); } 

Kaip sukonfigūruoti pavasario MVC (arba MappingJackson2HttpMessageConverter.class), kad nustatytumėte teisingą turinio ilgio antraštę? Kadangi dabar mano content-length atsako antraštė yra -1.

13
11 июня '14 в 9:56 2014-06-11 09:56 ruslanys yra nustatytas birželio 11 d . 14 val. 9:56 2014-06-11 09:56
@ 2 atsakymai

Jei norite filtruoti grandinę, galite pridėti „ShallowEtagHeaderFilter“. Man sekasi šie fragmentai.

 import java.util.Arrays; import org.springframework.boot.context.embedded.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.filter.ShallowEtagHeaderFilter; @Configuration public class FilterConfig { @Bean public FilterRegistrationBean filterRegistrationBean() { FilterRegistrationBean filterBean = new FilterRegistrationBean(); filterBean.setFilter(new ShallowEtagHeaderFilter()); filterBean.setUrlPatterns(Arrays.asList("*")); return filterBean; } } 

Atsakymo įstaiga atrodys taip:

 HTTP/1.1 200 OK Server: Apache-Coyote/1.1 X-Application-Context: application:sxp:8090 ETag: "05e7d49208ba5db71c04d5c926f91f382" Content-Type: application/json;charset=UTF-8 Content-Length: 232 Date: Wed, 16 Dec 2015 06:53:09 GMT 
9
16 дек. Atsakymą pateikė Woody Sun 16 gruodis. 2015-12-16 09:57 '15 at 9:57 2015-12-16 09:57

Šis grandinės filtras nustato turinio ilgį:

 import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletResponse; import org.springframework.web.util.ContentCachingResponseWrapper; public class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { ContentCachingResponseWrapper responseWrapper = new ContentCachingResponseWrapper((HttpServletResponse) response); chain.doFilter(request, responseWrapper); responseWrapper.copyBodyToResponse(); } @Override public void destroy() { } } 
border=0

Pagrindinė idėja yra ta, kad visas turinys yra talpykloje „ContentCachingResponseWrapper“, o galiausiai, turinio ilgis nustatomas, kai skambinate copyBodyToResponse ().

4
07 сент. Atsakymas Dmitrijus Buzoverya 07 Sep 2016-09-07 21:51 '16 at 21:51 2016-09-07 21:51