更改了两个响应包装类的包路径,让swagger变得可用了,修复了ProjectController中不能正常限制条件的Bug

master
ArgonarioD 2022-07-01 11:36:42 +08:00
parent fc99117637
commit e70e0c5f5a
16 changed files with 61 additions and 19 deletions

View File

@ -1,5 +1,6 @@
package cn.edu.hfut.rmdjzz.projectmanagement; package cn.edu.hfut.rmdjzz.projectmanagement;
import io.swagger.annotations.Api;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
@ -10,6 +11,7 @@ import org.springframework.web.bind.annotation.RestController;
* @author * @author
* @since 2022/6/27 11:24 * @since 2022/6/27 11:24
*/ */
@Api(tags = "hello")
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class}) @SpringBootApplication(exclude = {SecurityAutoConfiguration.class})
@RestController @RestController
public class ProjectManagement { public class ProjectManagement {

View File

@ -2,7 +2,7 @@ package cn.edu.hfut.rmdjzz.projectmanagement.advice;
import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException; import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException;
import cn.edu.hfut.rmdjzz.projectmanagement.exception.TokenException; import cn.edu.hfut.rmdjzz.projectmanagement.exception.TokenException;
import cn.edu.hfut.rmdjzz.projectmanagement.utils.response.ResponseMap; import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.ResponseMap;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ExceptionHandler;

View File

@ -4,11 +4,15 @@ import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
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.convert.converter.Converter;
import java.io.IOException; import java.io.IOException;
import java.time.*; import java.time.*;
import java.util.Map;
/** /**
* Jackson{@link LocalDateTime} {@link LocalDate} {@link LocalTime} * Jackson{@link LocalDateTime} {@link LocalDate} {@link LocalTime}
@ -77,4 +81,20 @@ public class SerializeConfig {
return om; return om;
} }
@SuppressWarnings({"Convert2Diamond", "NullableProblems", "rawtypes"})
@Bean
public Converter<String, Map> MapConverter() {
return new Converter<String, Map>() {
@Autowired
private ObjectMapper objectMapper;
@SneakyThrows
@Override
public Map convert(String source) {
return objectMapper.readValue(source, Map.class);
}
};
}
} }

View File

@ -4,6 +4,7 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo; import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact; import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType; import springfox.documentation.spi.DocumentationType;
@ -17,7 +18,8 @@ import java.util.ArrayList;
* @since 2022/6/27 11:24 * @since 2022/6/27 11:24
*/ */
@Configuration @Configuration
@EnableSwagger2 //开启Swagger2 //@EnableSwagger2 //开启Swagger2
@EnableOpenApi
public class SwaggerConfig { public class SwaggerConfig {
//配置 Swagger的Docket的Bean实例 //配置 Swagger的Docket的Bean实例

View File

@ -28,9 +28,8 @@ public class WebConfig implements WebMvcConfigurer {
registry.addInterceptor(getCorsInterceptor()).addPathPatterns("/**"); registry.addInterceptor(getCorsInterceptor()).addPathPatterns("/**");
registry.addInterceptor(getTokenInterceptor()) registry.addInterceptor(getTokenInterceptor())
.addPathPatterns("/**") .addPathPatterns("/**")
.excludePathPatterns("/staff/login") .excludePathPatterns("/hello", "/error") //测试
.excludePathPatterns("/hello") .excludePathPatterns("/staff/login") //登录
.excludePathPatterns("/error") .excludePathPatterns("/swagger-resources/**", "/swagger-ui/**", "/v3/**", "/v2/**"); //swagger
.excludePathPatterns("/swagger-ui/**");
} }
} }

View File

@ -3,9 +3,12 @@ package cn.edu.hfut.rmdjzz.projectmanagement.controller;
import cn.edu.hfut.rmdjzz.projectmanagement.entity.Project; import cn.edu.hfut.rmdjzz.projectmanagement.entity.Project;
import cn.edu.hfut.rmdjzz.projectmanagement.entity.ResultProject; import cn.edu.hfut.rmdjzz.projectmanagement.entity.ResultProject;
import cn.edu.hfut.rmdjzz.projectmanagement.service.IProjectService; import cn.edu.hfut.rmdjzz.projectmanagement.service.IProjectService;
import cn.edu.hfut.rmdjzz.projectmanagement.utils.response.ResponseList; import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.ResponseList;
import cn.edu.hfut.rmdjzz.projectmanagement.utils.response.ResponseMap; import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.ResponseMap;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -24,18 +27,24 @@ public class ProjectController {
@Autowired @Autowired
private IProjectService projectService; private IProjectService projectService;
@ApiOperation("根据Token获取该员工的ProjectList")
@ApiImplicitParams({
@ApiImplicitParam(name = "paramMap", value = "参数列表见Project实体类时间可以用xxxxStart与xxxxEnd来确定区间"
, required = true)
})
@SneakyThrows @SneakyThrows
@GetMapping @GetMapping
public ResponseList<ResultProject> getProjectListOfStaff( public ResponseList<ResultProject> getProjectListOfStaff(
@RequestHeader("Token") String token, @RequestHeader("Token") String token,
@RequestParam("pageCurrent") Integer pageCurrent,
@RequestParam("pageSize") Integer pageSize, @RequestParam("pageSize") Integer pageSize,
Map<String, Object> paramMap @RequestParam("pageCurrent") Integer pageCurrent,
@RequestParam("paramMap") Map<String, Object> paramMap
) { ) {
Page<ResultProject> page = projectService.getOnePageProject(token, pageCurrent, pageSize, paramMap); Page<ResultProject> page = projectService.getOnePageProject(token, pageCurrent, pageSize, paramMap);
return ResponseList.ofSuccess("成功返回列表", page); return ResponseList.ofSuccess("成功返回列表", page);
} }
@ApiOperation("根据Token获取该员工的Project数")
@SneakyThrows @SneakyThrows
@GetMapping("/total") @GetMapping("/total")
public ResponseMap getProjectNumOfStaff(@RequestHeader("Token") String token) { public ResponseMap getProjectNumOfStaff(@RequestHeader("Token") String token) {
@ -44,6 +53,10 @@ public class ProjectController {
return ResponseMap.ofSuccess("获得参与项目总数", res); return ResponseMap.ofSuccess("获得参与项目总数", res);
} }
@ApiImplicitParams({
@ApiImplicitParam(name = "map", value = "用于读取整个RequestBody实际传参时无意义请忽略"),
@ApiImplicitParam(paramType = "body", dataTypeClass = Integer.class, name = "projectId", required = true)
})
@SneakyThrows @SneakyThrows
@PostMapping("/complete") @PostMapping("/complete")
public ResponseMap completeProject(@RequestHeader("Token") String token, @RequestBody Map<String, Object> map) { public ResponseMap completeProject(@RequestHeader("Token") String token, @RequestBody Map<String, Object> map) {

View File

@ -2,7 +2,7 @@ package cn.edu.hfut.rmdjzz.projectmanagement.controller;
import cn.edu.hfut.rmdjzz.projectmanagement.entity.ProjectType; import cn.edu.hfut.rmdjzz.projectmanagement.entity.ProjectType;
import cn.edu.hfut.rmdjzz.projectmanagement.service.IProjectTypeService; import cn.edu.hfut.rmdjzz.projectmanagement.service.IProjectTypeService;
import cn.edu.hfut.rmdjzz.projectmanagement.utils.response.ResponseList; import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.ResponseList;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;

View File

@ -3,7 +3,9 @@ package cn.edu.hfut.rmdjzz.projectmanagement.controller;
import cn.edu.hfut.rmdjzz.projectmanagement.entity.Staff; import cn.edu.hfut.rmdjzz.projectmanagement.entity.Staff;
import cn.edu.hfut.rmdjzz.projectmanagement.exception.TokenException; import cn.edu.hfut.rmdjzz.projectmanagement.exception.TokenException;
import cn.edu.hfut.rmdjzz.projectmanagement.service.IStaffService; import cn.edu.hfut.rmdjzz.projectmanagement.service.IStaffService;
import cn.edu.hfut.rmdjzz.projectmanagement.utils.response.ResponseMap; import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.ResponseMap;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -18,6 +20,9 @@ public class StaffController {
@Autowired @Autowired
private IStaffService staffService; private IStaffService staffService;
@ApiImplicitParams({
@ApiImplicitParam(name = "staff", value = "只需要传入staffUsername和staffPassword两个属性即可staffPassword需要md5加密后传输")
})
@SneakyThrows @SneakyThrows
@PostMapping("/login") @PostMapping("/login")
public ResponseMap login(@RequestBody Staff staff) { public ResponseMap login(@RequestBody Staff staff) {

View File

@ -10,7 +10,6 @@ import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -24,6 +23,7 @@ public class TokenInterceptor implements HandlerInterceptor {
@Autowired @Autowired
private RedisTemplate<Object, Object> redisTemplate; private RedisTemplate<Object, Object> redisTemplate;
//FIXME: 最终上线时要把这里的输出删掉
@Override @Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object object) throws TokenException { public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object object) throws TokenException {
System.out.println(httpServletRequest.getRequestURL() + " " + httpServletRequest.getMethod()); System.out.println(httpServletRequest.getRequestURL() + " " + httpServletRequest.getMethod());

View File

@ -3,7 +3,7 @@ package cn.edu.hfut.rmdjzz.projectmanagement.service;
import cn.edu.hfut.rmdjzz.projectmanagement.entity.Staff; import cn.edu.hfut.rmdjzz.projectmanagement.entity.Staff;
import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException; import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException;
import cn.edu.hfut.rmdjzz.projectmanagement.exception.TokenException; import cn.edu.hfut.rmdjzz.projectmanagement.exception.TokenException;
import cn.edu.hfut.rmdjzz.projectmanagement.utils.response.ResponseMap; import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.ResponseMap;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
/** /**

View File

@ -82,6 +82,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
throw new BadRequestException("参数错误"); throw new BadRequestException("参数错误");
} }
//FIXME: 改为特定Exception处理
try { try {
if (baseMapper.insert(project) == 1) { if (baseMapper.insert(project) == 1) {
return projectGroupService.addCreator(project.getProjectId(), TokenUtils.getStaffId(token)); return projectGroupService.addCreator(project.getProjectId(), TokenUtils.getStaffId(token));

View File

@ -6,7 +6,7 @@ import cn.edu.hfut.rmdjzz.projectmanagement.exception.TokenException;
import cn.edu.hfut.rmdjzz.projectmanagement.mapper.StaffMapper; import cn.edu.hfut.rmdjzz.projectmanagement.mapper.StaffMapper;
import cn.edu.hfut.rmdjzz.projectmanagement.service.IStaffService; import cn.edu.hfut.rmdjzz.projectmanagement.service.IStaffService;
import cn.edu.hfut.rmdjzz.projectmanagement.utils.TokenUtils; import cn.edu.hfut.rmdjzz.projectmanagement.utils.TokenUtils;
import cn.edu.hfut.rmdjzz.projectmanagement.utils.response.ResponseMap; import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.ResponseMap;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;

View File

@ -1,4 +1,4 @@
package cn.edu.hfut.rmdjzz.projectmanagement.utils.response; package cn.edu.hfut.rmdjzz.projectmanagement.utils.http;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.AccessLevel; import lombok.AccessLevel;

View File

@ -1,4 +1,4 @@
package cn.edu.hfut.rmdjzz.projectmanagement.utils.response; package cn.edu.hfut.rmdjzz.projectmanagement.utils.http;
import cn.edu.hfut.rmdjzz.projectmanagement.utils.BeanUtils; import cn.edu.hfut.rmdjzz.projectmanagement.utils.BeanUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

View File

@ -36,7 +36,7 @@ public class MybatisPlusTests {
@Test @Test
public void test() { public void test() {
staffService.page(new Page<Staff>(2, 1)); staffService.page(new Page<>(2, 1));
} }
@SneakyThrows @SneakyThrows
@ -48,6 +48,7 @@ public class MybatisPlusTests {
map.put("etimeEnd", LocalDate.now());*/ map.put("etimeEnd", LocalDate.now());*/
map.put("null", null); map.put("null", null);
map.put("deleted", true); map.put("deleted", true);
map.put("completed", true);
QueryWrapper<String> wrapper = WrapperUtils.allEqAndTimeIntervalQueryWrapper(map, true, true, true); QueryWrapper<String> wrapper = WrapperUtils.allEqAndTimeIntervalQueryWrapper(map, true, true, true);
System.out.println(wrapper.getCustomSqlSegment()); System.out.println(wrapper.getCustomSqlSegment());
System.out.println(objectMapper.writeValueAsString(wrapper.getParamNameValuePairs())); System.out.println(objectMapper.writeValueAsString(wrapper.getParamNameValuePairs()));

View File

@ -7,7 +7,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime;
/** /**
* @author * @author