Wrap response globally

pull/137/head
johnniang 2019-03-19 20:19:48 +08:00
parent 57965ba859
commit d991627516
3 changed files with 15 additions and 4 deletions

View File

@ -1,15 +1,18 @@
package cc.ryanc.halo.config; package cc.ryanc.halo.config;
import cc.ryanc.halo.config.properties.HaloProperties; import cc.ryanc.halo.config.properties.HaloProperties;
import cc.ryanc.halo.model.entity.User;
import cc.ryanc.halo.security.support.UserDetail;
import com.fasterxml.classmate.TypeResolver; import com.fasterxml.classmate.TypeResolver;
import io.swagger.models.auth.In; import io.swagger.models.auth.In;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered; import org.springframework.core.Ordered;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
import org.springframework.http.HttpHeaders;
import org.springframework.lang.NonNull; import org.springframework.lang.NonNull;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
@ -20,6 +23,7 @@ import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType; import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext; import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.spring.web.plugins.JacksonSerializerConvention;
import springfox.documentation.swagger.web.SecurityConfiguration; import springfox.documentation.swagger.web.SecurityConfiguration;
import springfox.documentation.swagger.web.SecurityConfigurationBuilder; import springfox.documentation.swagger.web.SecurityConfigurationBuilder;
import springfox.documentation.swagger2.annotations.EnableSwagger2; import springfox.documentation.swagger2.annotations.EnableSwagger2;
@ -139,7 +143,7 @@ public class SwaggerConfiguration {
} }
@Bean @Bean
public AlternateTypeRuleConvention pageableConvention(final TypeResolver resolver) { public AlternateTypeRuleConvention customizeConvention(TypeResolver resolver) {
return new AlternateTypeRuleConvention() { return new AlternateTypeRuleConvention() {
@Override @Override
public int getOrder() { public int getOrder() {
@ -149,6 +153,8 @@ public class SwaggerConfiguration {
@Override @Override
public List<AlternateTypeRule> rules() { public List<AlternateTypeRule> rules() {
return Arrays.asList( return Arrays.asList(
newRule(User.class, emptyMixin(User.class)),
newRule(UserDetail.class, emptyMixin(UserDetail.class)),
newRule(resolver.resolve(Pageable.class), resolver.resolve(pageableMixin())), newRule(resolver.resolve(Pageable.class), resolver.resolve(pageableMixin())),
newRule(resolver.resolve(Sort.class), resolver.resolve(sortMixin()))); newRule(resolver.resolve(Sort.class), resolver.resolve(sortMixin())));
} }

View File

@ -15,7 +15,7 @@ import org.springframework.web.servlet.mvc.method.annotation.AbstractMappingJack
* *
* @author johnniang * @author johnniang
*/ */
@ControllerAdvice("cc.ryanc.halo.web.controller.api") @ControllerAdvice("cc.ryanc.halo.web.controller")
public class CommonResultControllerAdvice extends AbstractMappingJacksonResponseBodyAdvice { public class CommonResultControllerAdvice extends AbstractMappingJacksonResponseBodyAdvice {
@Override @Override

View File

@ -24,7 +24,12 @@ public class PageJacksonSerializer extends JsonSerializer<Page> {
generator.writeNumberField("total", page.getTotalElements()); generator.writeNumberField("total", page.getTotalElements());
generator.writeNumberField("page", page.getNumber()); generator.writeNumberField("page", page.getNumber());
generator.writeNumberField("rpp", page.getSize()); generator.writeNumberField("rpp", page.getSize());
generator.writeBooleanField("hasNext", page.hasNext());
generator.writeBooleanField("hasPrevious", page.hasPrevious());
generator.writeBooleanField("isFirst", page.isFirst());
generator.writeBooleanField("isLast", page.isLast());
generator.writeBooleanField("isEmpty", page.isEmpty());
generator.writeBooleanField("hasContent", page.hasContent());
generator.writeEndObject(); generator.writeEndObject();
} }
} }