Raise the minimum supported version of Spring Framework to 5.0
This commit upgrades to Spring Framework 5.0.0.RC1. It also upgrades the Spring Boot-based samples to use Spring Boot 2.0.0.M1 which supports Spring Framework 5. Lastly, it upgrades a number of third-party dependencies to align with Spring Framework 5 and Spring Boot 2. Closes gh-386
This commit is contained in:
@@ -20,6 +20,7 @@ allprojects {
|
||||
group = 'org.springframework.restdocs'
|
||||
repositories {
|
||||
mavenCentral()
|
||||
maven { url 'https://repo.spring.io/milestone' }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,7 +39,7 @@ sonarqube {
|
||||
}
|
||||
|
||||
ext {
|
||||
springVersion = '4.3.6.RELEASE'
|
||||
springVersion = '5.0.0.RC1'
|
||||
javadocLinks = [
|
||||
'http://docs.oracle.com/javase/8/docs/api/',
|
||||
"http://docs.spring.io/spring-framework/docs/$springVersion/javadoc-api/",
|
||||
@@ -64,7 +65,7 @@ subprojects {
|
||||
mavenBom "org.springframework:spring-framework-bom:$springVersion"
|
||||
}
|
||||
dependencies {
|
||||
dependency 'com.fasterxml.jackson.core:jackson-databind:2.5.5'
|
||||
dependency 'com.fasterxml.jackson.core:jackson-databind:2.9.0.pr3'
|
||||
dependency 'com.jayway.restassured:rest-assured:2.8.0'
|
||||
dependency 'com.samskivert:jmustache:1.12'
|
||||
dependency 'commons-codec:commons-codec:1.10'
|
||||
@@ -75,9 +76,9 @@ subprojects {
|
||||
dependency 'org.asciidoctor:asciidoctorj:1.5.3.1'
|
||||
dependency 'org.hamcrest:hamcrest-core:1.3'
|
||||
dependency 'org.hamcrest:hamcrest-library:1.3'
|
||||
dependency 'org.hibernate:hibernate-validator:5.2.2.Final'
|
||||
dependency 'org.hibernate:hibernate-validator:5.4.1.Final'
|
||||
dependency 'org.mockito:mockito-core:1.10.19'
|
||||
dependency 'org.springframework.hateoas:spring-hateoas:0.19.0.RELEASE'
|
||||
dependency 'org.springframework.hateoas:spring-hateoas:0.23.0.RELEASE'
|
||||
dependency 'org.jacoco:org.jacoco.agent:0.7.7.201606060606'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,7 +68,7 @@ If you want to jump straight in, a number of sample applications are available:
|
||||
Spring REST Docs has the following minimum requirements:
|
||||
|
||||
- Java 8
|
||||
- Spring Framework 4.3
|
||||
- Spring Framework 5
|
||||
|
||||
Additionally, the `spring-restdocs-restassured` module has the following minimum
|
||||
requirements:
|
||||
|
||||
@@ -21,7 +21,7 @@ import org.springframework.test.web.servlet.MockMvc;
|
||||
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;
|
||||
import static org.springframework.restdocs.request.RequestDocumentation.partWithName;
|
||||
import static org.springframework.restdocs.request.RequestDocumentation.requestParts;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.fileUpload;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.multipart;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
||||
public class RequestParts {
|
||||
@@ -30,7 +30,7 @@ public class RequestParts {
|
||||
|
||||
public void upload() throws Exception {
|
||||
// tag::request-parts[]
|
||||
this.mockMvc.perform(fileUpload("/upload").file("file", "example".getBytes())) // <1>
|
||||
this.mockMvc.perform(multipart("/upload").file("file", "example".getBytes())) // <1>
|
||||
.andExpect(status().isOk())
|
||||
.andDo(document("upload", requestParts( // <2>
|
||||
partWithName("file").description("The file to upload")) // <3>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
buildscript {
|
||||
repositories {
|
||||
mavenCentral()
|
||||
maven { url 'https://repo.spring.io/milestone' }
|
||||
}
|
||||
dependencies {
|
||||
classpath 'org.springframework.boot:spring-boot-gradle-plugin:1.5.3.RELEASE'
|
||||
classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.0.0.M1'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,8 +12,9 @@ plugins {
|
||||
}
|
||||
|
||||
apply plugin: 'java'
|
||||
apply plugin: 'spring-boot'
|
||||
apply plugin: 'org.springframework.boot'
|
||||
apply plugin: 'eclipse'
|
||||
apply plugin: 'io.spring.dependency-management'
|
||||
|
||||
repositories {
|
||||
mavenLocal()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2016 the original author or authors.
|
||||
* Copyright 2014-2017 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -27,9 +27,9 @@ import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.boot.context.embedded.LocalServerPort;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
|
||||
import org.springframework.boot.web.server.LocalServerPort;
|
||||
import org.springframework.restdocs.JUnitRestDocumentation;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
buildscript {
|
||||
repositories {
|
||||
mavenCentral()
|
||||
maven { url 'https://repo.spring.io/milestone' }
|
||||
}
|
||||
dependencies {
|
||||
classpath 'org.springframework.boot:spring-boot-gradle-plugin:1.5.3.RELEASE'
|
||||
classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.0.0.M1'
|
||||
}
|
||||
}
|
||||
|
||||
apply plugin: 'java'
|
||||
apply plugin: 'spring-boot'
|
||||
apply plugin: 'org.springframework.boot'
|
||||
apply plugin: 'eclipse'
|
||||
apply plugin: 'io.spring.dependency-management'
|
||||
|
||||
repositories {
|
||||
mavenLocal()
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
|
||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||
org.eclipse.jdt.core.compiler.compliance=1.7
|
||||
org.eclipse.jdt.core.compiler.compliance=1.8
|
||||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
||||
org.eclipse.jdt.core.compiler.source=1.7
|
||||
org.eclipse.jdt.core.compiler.source=1.8
|
||||
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
|
||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
|
||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>1.5.3.RELEASE</version>
|
||||
<version>2.0.0.M1</version>
|
||||
<relativePath />
|
||||
</parent>
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
buildscript {
|
||||
repositories {
|
||||
mavenCentral()
|
||||
maven { url 'https://repo.spring.io/milestone' }
|
||||
}
|
||||
dependencies {
|
||||
classpath 'org.springframework.boot:spring-boot-gradle-plugin:1.5.3.RELEASE'
|
||||
classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.0.0.M1'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,8 +12,9 @@ plugins {
|
||||
}
|
||||
|
||||
apply plugin: 'java'
|
||||
apply plugin: 'spring-boot'
|
||||
apply plugin: 'org.springframework.boot'
|
||||
apply plugin: 'eclipse'
|
||||
apply plugin: 'io.spring.dependency-management'
|
||||
|
||||
repositories {
|
||||
mavenLocal()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014 the original author or authors.
|
||||
* Copyright 2014-2017 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -18,7 +18,7 @@ package com.example.notes;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.boot.autoconfigure.web.DefaultErrorAttributes;
|
||||
import org.springframework.boot.autoconfigure.web.servlet.error.DefaultErrorAttributes;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.context.request.RequestAttributes;
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2015 the original author or authors.
|
||||
* Copyright 2014-2017 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -87,7 +87,7 @@ public class NotesController {
|
||||
|
||||
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
|
||||
void delete(@PathVariable("id") long id) {
|
||||
this.noteRepository.delete(id);
|
||||
this.noteRepository.deleteById(id);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2015 the original author or authors.
|
||||
* Copyright 2014-2017 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -74,7 +74,7 @@ public class TagsController {
|
||||
|
||||
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
|
||||
void delete(@PathVariable("id") long id) {
|
||||
this.repository.delete(id);
|
||||
this.repository.deleteById(id);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
buildscript {
|
||||
repositories {
|
||||
mavenCentral()
|
||||
maven { url 'https://repo.spring.io/milestone' }
|
||||
}
|
||||
dependencies {
|
||||
classpath 'org.springframework.boot:spring-boot-gradle-plugin:1.5.3.RELEASE'
|
||||
classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.0.0.M1'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,8 +12,9 @@ plugins {
|
||||
}
|
||||
|
||||
apply plugin: 'java'
|
||||
apply plugin: 'spring-boot'
|
||||
apply plugin: 'org.springframework.boot'
|
||||
apply plugin: 'eclipse'
|
||||
apply plugin: 'io.spring.dependency-management'
|
||||
|
||||
repositories {
|
||||
mavenLocal()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2016 the original author or authors.
|
||||
* Copyright 2014-2017 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -53,8 +53,10 @@ public abstract class AbstractHeadersSnippet extends TemplatedSnippet {
|
||||
Map<String, Object> attributes) {
|
||||
super(type + "-headers", attributes);
|
||||
for (HeaderDescriptor descriptor : descriptors) {
|
||||
Assert.notNull(descriptor.getName());
|
||||
Assert.notNull(descriptor.getDescription());
|
||||
Assert.notNull(descriptor.getName(),
|
||||
"The name of the header must not be null");
|
||||
Assert.notNull(descriptor.getDescription(),
|
||||
"The description of the header must not be null");
|
||||
}
|
||||
this.headerDescriptors = descriptors;
|
||||
this.type = type;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2015 the original author or authors.
|
||||
* Copyright 2014-2017 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -270,7 +270,8 @@ public class ResourceBundleConstraintDescriptionResolverTests {
|
||||
private Constraint getConstraintFromField(String name) {
|
||||
Annotation[] annotations = ReflectionUtils.findField(Constrained.class, name)
|
||||
.getAnnotations();
|
||||
Assert.isTrue(annotations.length == 1);
|
||||
Assert.isTrue(annotations.length == 1, "The field '" + name + "' must have"
|
||||
+ "exactly one @Constrained annotation");
|
||||
return new Constraint(annotations[0].annotationType().getName(),
|
||||
AnnotationUtils.getAnnotationAttributes(annotations[0]));
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2015 the original author or authors.
|
||||
* Copyright 2014-2017 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -249,7 +249,7 @@ public abstract class RestDocumentationRequestBuilders {
|
||||
public static MockMultipartHttpServletRequestBuilder fileUpload(String urlTemplate,
|
||||
Object... urlVariables) {
|
||||
return (MockMultipartHttpServletRequestBuilder) MockMvcRequestBuilders
|
||||
.fileUpload(urlTemplate, urlVariables)
|
||||
.multipart(urlTemplate, urlVariables)
|
||||
.requestAttr(RestDocumentationGenerator.ATTRIBUTE_NAME_URL_TEMPLATE,
|
||||
urlTemplate);
|
||||
}
|
||||
@@ -261,7 +261,7 @@ public abstract class RestDocumentationRequestBuilders {
|
||||
* @return the builder for the file upload request
|
||||
*/
|
||||
public static MockMultipartHttpServletRequestBuilder fileUpload(URI uri) {
|
||||
return MockMvcRequestBuilders.fileUpload(uri);
|
||||
return MockMvcRequestBuilders.multipart(uri);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -174,7 +174,7 @@ public class MockMvcRequestConverterTests {
|
||||
@Test
|
||||
public void mockMultipartFileUpload() throws Exception {
|
||||
OperationRequest request = createOperationRequest(
|
||||
MockMvcRequestBuilders.fileUpload("/foo")
|
||||
MockMvcRequestBuilders.multipart("/foo")
|
||||
.file(new MockMultipartFile("file", new byte[] { 1, 2, 3, 4 })));
|
||||
assertThat(request.getUri(), is(URI.create("http://localhost/foo")));
|
||||
assertThat(request.getMethod(), is(HttpMethod.POST));
|
||||
@@ -190,7 +190,7 @@ public class MockMvcRequestConverterTests {
|
||||
@Test
|
||||
public void mockMultipartFileUploadWithContentType() throws Exception {
|
||||
OperationRequest request = createOperationRequest(
|
||||
MockMvcRequestBuilders.fileUpload("/foo").file(new MockMultipartFile(
|
||||
MockMvcRequestBuilders.multipart("/foo").file(new MockMultipartFile(
|
||||
"file", "original", "image/png", new byte[] { 1, 2, 3, 4 })));
|
||||
assertThat(request.getUri(), is(URI.create("http://localhost/foo")));
|
||||
assertThat(request.getMethod(), is(HttpMethod.POST));
|
||||
|
||||
@@ -93,7 +93,7 @@ import static org.springframework.restdocs.test.SnippetMatchers.codeBlock;
|
||||
import static org.springframework.restdocs.test.SnippetMatchers.httpRequest;
|
||||
import static org.springframework.restdocs.test.SnippetMatchers.httpResponse;
|
||||
import static org.springframework.restdocs.test.SnippetMatchers.snippet;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.fileUpload;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.multipart;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
||||
@@ -348,7 +348,7 @@ public class MockMvcRestDocumentationIntegrationTests {
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(this.context)
|
||||
.apply(documentationConfiguration(this.restDocumentation)).build();
|
||||
|
||||
mockMvc.perform(fileUpload("/upload").file("foo", "bar".getBytes()))
|
||||
mockMvc.perform(multipart("/upload").file("foo", "bar".getBytes()))
|
||||
.andExpect(status().isOk()).andDo(document("request-parts", requestParts(
|
||||
partWithName("foo").description("The description"))));
|
||||
|
||||
@@ -577,7 +577,7 @@ public class MockMvcRestDocumentationIntegrationTests {
|
||||
public void multiPart() throws Exception {
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(this.context)
|
||||
.apply(documentationConfiguration(this.restDocumentation)).build();
|
||||
mockMvc.perform(fileUpload("/upload").file("test", "content".getBytes()))
|
||||
mockMvc.perform(multipart("/upload").file("test", "content".getBytes()))
|
||||
.andExpect(status().isOk()).andDo(document("upload",
|
||||
requestParts(partWithName("test").description("Foo"))));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user