我正在开发一个尝试使用此示例实现MVP模式的asp.net(经典)应用程序.在尝试对我的演示者进行单元测试并使用以下模式时,psuedocode看起来像这样
//base view interface
public interface IView
{
event EventHandler Init;
event EventHandler Load;
bool IsPostBack { get; }
void DataBind();
bool IsValid { get;}
}
//presenter psuedo code
public class SomePresenter
{
public SomePresenter(ISomeDomainService service, IView someView)
{
...
//HOW DO WE TEST/VERIFY THAT THIS REGISTRATION OCCURS?
someView.Init += OnInit;
someView.Load += OnLoad;
}
}
...
//consuming code that exercises the above code, that needs to be tested
var presenter = new SomePresenter(someDomainService, someView);
Run Code Online (Sandbox Code Playgroud)
如何验证演示者是否正在执行预期的操作,即注册Init和Load事件?虽然这很容易在Phil Haack …
我有控制器这么简单:
@RequestMapping(value="/async/data", method=RequestMethod.GET, produces="application/json")
@ApiOperation(value = "Gets data", notes="Gets data asynchronously")
@ApiResponses(value={@ApiResponse(code=200, message="OK")})
public Callable<List<Data>> getData(){
return ( () -> {return dataService.loadData();} );
}
Run Code Online (Sandbox Code Playgroud)
我期望只有HTTP状态200的响应消息.但是springfox总是生成下面的那些(401,403,404).如何禁用(不显示)它们?
async-rest-controller Show/Hide List Operations Expand Operations
GET /async/data Gets data
Implementation Notes
Gets data asynchronously
Response Class (Status 200)
ModelModel Schema
{}
Response Content Type
Response Messages
HTTP Status Code Reason Response Model Headers
401 Unauthorized
403 Forbidden
404 Not Found
Run Code Online (Sandbox Code Playgroud) 使用WCF Web编程模型可以指定操作合同,如下所示:
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Xml, UriTemplate = "SomeRequest?qs1={qs1}&qs2={qs2}")]
XElement SomeRequest1(string qs1, string qs2);
Run Code Online (Sandbox Code Playgroud)
现在,如果我们必须签订一个接受具有相同名称的参数数组(在这种情况下为qs1)的合同,那么......
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Xml, UriTemplate = "SomeRequest?qs1={qs1}&qs1={qs2}")]
XElement SomeRequest2(string qs1, string qs2);
Run Code Online (Sandbox Code Playgroud)
当我们调用方法时,我们在运行时收到错误消息:
查询字符串必须具有唯一名称的"name = value"对.请注意,名称不区分大小写.有关更多详细信息,请参阅UriTemplate的文档.
如何定义一个HTTP服务,该服务使用参数数组公开资源,而不需要使用loosey-goosey接口?
我们有一个遗留应用程序(经典ASP和ASP.net的混合),它有一些Ajax内容丰富的页面.期望网站的用户在页面上执行一系列任务,可以跨越相当长的时间说,15-30分钟.
其中一个要求是登录到站点的用户在15分钟不活动后自动注销.目前,这是通过使用元标记在页面中不活动15分钟后将用户重定向到注销页面来实现的.
<meta name='Refresh' http-equiv="Refresh" content="900;URL=/someurl/logout.asp">
我们遇到的问题是,尽管与服务器进行了许多AJAX交互,浏览器仍然认为页面上没有任何活动.因此,在浏览器认为不活动的15分钟后,即使用户正在做某事,用户也会自动注销.
受此留言板帖子的启发,我们试图通过使用javascript(JQuery)来解决烦恼
下面将是一个事件处理程序,例如单击页面上的保存等.为简单起见,这里是将页面加载修改为5秒的刷新时间
$(document).ready(function() {
var selector = 'meta[name=Refresh]';
var content = $(selector).attr("content"); //"900;URL=/someurl/logout.asp"
$(selector).attr("content", "5;URL=/someurl/logout.asp");
});
Run Code Online (Sandbox Code Playgroud)
将重置(重新)设置元标记内容的页面刷新计时器的意图将被重置.不幸的是,这似乎不起作用(在IE中).
由于这是一个遗留应用程序,因此有些决定即使用元标记等.问题是,有没有办法让元标记刷新与Ajax应用程序和平共存?我做错了什么,有办法解决这个问题吗?
我使用Springfox遇到了一些小麻烦.我无法为@RestController类设置名称.
我正在使用Spring启动和Swagger2.
以下代码将在springfox ui中生成一个名为"rest-status-controller"的控制器.我期待一个"应用程序状态".还有其他配置我不知道吗?
@Api("Application Status")
@RestController
@RequestMapping("/rest/status")
public class RestStatusController {
@ApiOperation(value="Get components current status")
@RequestMapping(method = RequestMethod.GET, produces=MediaType.APPLICATION_JSON)
public String global() {
//...
}
@ApiOperation(value="Get mysql current status")
@RequestMapping(value="/mysql" method = RequestMethod.GET, produces=MediaType.APPLICATION_JSON)
public String mysql() {
//...
}
}
Run Code Online (Sandbox Code Playgroud) 你们中的任何人都可以为基于Spring MVC的REST API实现Swagger提出其他建议吗?仅供参考,这不是Spring Boot。我已经尝试过Springfox,但是恕我直言,这是一辆越野车。
我有多个微服务,已经为此大刀阔斧了。我想将所有api置于单一的swagger UI下。我已经按照以下链接进行了此操作。但在STS中以Maven方法尝试过。 昂首阔步的Github示例
这是我在项目中的不同文件,
@SpringBootApplication
@ComponentScan
@EnableAutoConfiguration
@EnableSwagger2
public class SgtestApplication {
public static void main(String[] args) {
SpringApplication.run(SgtestApplication.class, args);
}
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()
.apis(Predicates.not(RequestHandlerSelectors.basePackage("org.springframework.boot")))
.apis(Predicates.not(RequestHandlerSelectors.basePackage("org.springframework.cloud")))
.apis(Predicates.not(RequestHandlerSelectors.basePackage("org.springframework.security")))
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Single swagger")
.description("API to retrieve swagger apis")
.version("1.0.0")
.build();
}
}
Run Code Online (Sandbox Code Playgroud)
我的资源提供者如下,
@Component
@Primary
@EnableAutoConfiguration
public class GatewaySwaggerResourceProvider implements SwaggerResourcesProvider {
@Autowired
private SwaggerServicesConfig swaggerServiceList;
public GatewaySwaggerResourceProvider() {
}
@Override
public List<SwaggerResource> get() {
List<SwaggerResource> resources = new ArrayList<>(); …Run Code Online (Sandbox Code Playgroud) 我试图在我的 spring 项目中配置 swagger,但是点击“ http://localhost:8080/api-docs ”说“404 Not Found”。
Maven 依赖
<dependency>
<groupId>com.mangofactory</groupId>
<artifactId>swagger-springmvc</artifactId>
<version>0.8.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
SwaggerConfig.java 文件
package com.ucap.swagger;
import com.mangofactory.swagger.configuration.JacksonScalaSupport;
import com.mangofactory.swagger.configuration.SpringSwaggerConfig;
import com.mangofactory.swagger.configuration.SpringSwaggerModelConfig;
import com.mangofactory.swagger.configuration.SwaggerGlobalSettings;
import com.mangofactory.swagger.core.DefaultSwaggerPathProvider;
import com.mangofactory.swagger.core.SwaggerApiResourceListing;
import com.mangofactory.swagger.core.SwaggerPathProvider;
import com.mangofactory.swagger.scanners.ApiListingReferenceScanner;
import com.wordnik.swagger.model.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static com.google.common.collect.Lists.newArrayList;
@Configuration
@ComponentScan(basePackages = "com.mangofactory.swagger")
public class SwaggerConfig {
public static final List<String> DEFAULT_INCLUDE_PATTERNS = Arrays.asList("/news/.*");
public static final String SWAGGER_GROUP = "mobile-api";
@Value("${app.docs}")
private …Run Code Online (Sandbox Code Playgroud) swagger ×5
spring-mvc ×3
springfox ×3
rest ×2
spring-boot ×2
swagger-ui ×2
.net ×1
asp.net ×1
c# ×1
contract ×1
java ×1
javascript ×1
jquery ×1
meta-tags ×1
moq ×1
refresh ×1
spring ×1
unit-testing ×1
wcf ×1
web-services ×1