1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/gitxys-restful-api-demo

В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Название проекта restfu-api-demo

Описание

RESTFUL — это стиль проектирования и разработки веб-приложений, основанный на протоколе HTTP, который может использовать формат XML или JSON для представления данных. RESTFUL подходит для сценариев, где мобильные интернет-провайдеры используют RESTFUL API как бизнес-интерфейсы для вызова ресурсов мобильной сети, включая действия типа добавления, изменения и удаления ресурсов.

Важные моменты

1. Maven зависимости

 <!-- springCloud主要用于jar包的版本控制 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
```        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${commons-lang3.version}</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-commons</artifactId>
            <version>${data-commons.version}</version>
        </dependency>
```        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>${commons-io.version}</version>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>${commons-lang.version}</version>
        </dependency>
        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>${commons-collections.version}</version>
        </dependency>
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>${commons-beanutils.version}</version>
        </dependency>```markdown
<!-- RESTful APIs swagger2 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>${swagger.version}</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>${swagger.version}</version>
</dependency><dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>${hutool.version}</version>
</dependency>

2. Групповая валидация

Сущность определена следующим образом:

public class User implements Serializable {
    private static final long serialVersionUID = 1838417777538323571L;

    // Первичный ключ
    @NotNull(message = "Первичный ключ не может быть пустым", groups = Update.class)
    private Long id;
    // Имя пользователя
    @NotNull(message = "Имя пользователя не может быть пустым")
    private String userName;
    // Пароль
    @NotNull(message = "Пароль не может быть пустым")
    private String password;
    // Пол
    @NotNull(message = "Пол не может быть пустым")
    private String sex;

    @interface Update {
    }
}

Контроллер кода, BindingResult bindingResult должен быть указан в параметрах метода, иначе валидация не пройдет. Валидация логика обрабатывается через @FwValidate аспект.

/**
 * Добавление пользователя
 * @Author xuyisu
 * @Date 2019/10/25
 * @Param [user]
 * @Return com.yisu.common.result.FwResult
 */
@PostMapping
@ApiOperation(value = "Создание пользователя")
@FwValidate
public FwResult createUser(@Valid @RequestBody User user, BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
        return FwResult.failed();
    }
    FwResult userInfo = userService.createUser(user);
    return userInfo;
}

/**
 * Обновление пользователя
 * @Author xuyisu
 * @Date 2019/10/25
 * @Param [user]
 * @Return com.yisu.common.result.FwResult
 */
@PutMapping("/updateUser")
@ApiOperation(value = "Обновление пользователя")
@FwValidate
public FwResult updateUser(@Validated(User.Update.class) @RequestBody User user, BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
        return FwResult.failed();
    }
    FwResult userInfo = userService.updateUser(user);
    return userInfo;
}
```### 3. Конфигурация Swagger
```java
/**
 * Страница API /swagger-ui.html
 * @author xuyisu
 * @date 2019-10-15
 */
```@Configuration
@EnableSwagger2
public class SwaggerConfig {


    @Value("${swagger.enabled}")
    private Boolean enabled;

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .enable(enabled)
                .apiInfo(apiInfo())
                .select()
                .paths(Predicates.not(PathSelectors.regex("/error.*")))
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Документация интерфейсов")
                .version("1.0")
                .build();
    }

}

В браузере введите http://localhost:8766/swagger-ui.html# swagger

4. Юнит-тестирование

/**
 * @ClassName UserControllerTest
 * @Author xuyisu
 * @Description Моделирование HTTP-тестирования
 * @Date 2019/10/25
 */
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class UserControllerTest {

    @Autowired
    private WebApplicationContext wac;

    private MockMvc mockMvc;

    @Before
    public void setup() {
        mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
    }

    @Test
    public void когдаПолучаемИнформациюОПользователеУспешно() throws Exception {
        String result = mockMvc.perform(get("/user/1")
                .contentType(MediaType.APPLICATION_JSON_UTF8))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.code").value(FwCommonConstants.SUCCESS))
                .andReturn().getResponse().getContentAsString();

        System.out.println(result);
    }
    //.......
    //Детали см. в коде `com.yisu.mock.UserControllerTest`

Пожалуйста, оставьте звездочку перед уходом

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

На основе Spring Boot 2.1.6 реализован доступ в стиле REST. Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Язык

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/gitxys-restful-api-demo.git
git@api.gitlife.ru:oschina-mirror/gitxys-restful-api-demo.git
oschina-mirror
gitxys-restful-api-demo
gitxys-restful-api-demo
master