Skip to content

Commit aa0851a

Browse files
Make AbstractProblemResolver primary method abstract
1 parent 19ba402 commit aa0851a

5 files changed

Lines changed: 45 additions & 21 deletions

File tree

problem4j-spring-web/src/main/java/io/github/problem4j/spring/web/parameter/Violation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,6 @@ public int hashCode() {
125125
*/
126126
@Override
127127
public String toString() {
128-
return "Violation{field='" + field + "', error='" + error + "'}";
128+
return "Violation[field=" + field + ", error=" + error + "]";
129129
}
130130
}

problem4j-spring-web/src/main/java/io/github/problem4j/spring/web/resolver/AbstractProblemResolver.java

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,8 @@
1616

1717
package io.github.problem4j.spring.web.resolver;
1818

19-
import io.github.problem4j.core.Problem;
20-
import io.github.problem4j.core.ProblemContext;
2119
import io.github.problem4j.spring.web.ProblemFormat;
2220
import org.jspecify.annotations.Nullable;
23-
import org.springframework.http.HttpHeaders;
24-
import org.springframework.http.HttpStatus;
25-
import org.springframework.http.HttpStatusCode;
2621

2722
/**
2823
* Convenience base class for {@link ProblemResolver}-s.
@@ -69,19 +64,6 @@ public Class<? extends Exception> getExceptionClass() {
6964
return clazz;
7065
}
7166

72-
/**
73-
* Default implementation returning a {@link Problem} with {@link
74-
* HttpStatus#INTERNAL_SERVER_ERROR}. Subclasses override this to populate fields like {@code
75-
* type}, {@code title}, {@code detail}, and extensions.
76-
*
77-
* @since 3.0.0
78-
*/
79-
@Override
80-
public Problem resolve(
81-
ProblemContext context, Exception ex, HttpHeaders headers, HttpStatusCode status) {
82-
return Problem.of(HttpStatus.INTERNAL_SERVER_ERROR.value());
83-
}
84-
8567
/**
8668
* Applies the configured {@link ProblemFormat} to a detail string.
8769
*

problem4j-spring-web/src/test/java/io/github/problem4j/spring/web/CachingProblemResolverStoreTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import static org.junit.jupiter.api.Assertions.assertSame;
2121
import static org.junit.jupiter.api.Assertions.assertTrue;
2222

23+
import io.github.problem4j.core.Problem;
24+
import io.github.problem4j.core.ProblemContext;
2325
import io.github.problem4j.spring.web.resolver.AbstractProblemResolver;
2426
import io.github.problem4j.spring.web.resolver.ProblemResolver;
2527
import java.io.IOException;
@@ -33,6 +35,9 @@
3335
import java.util.concurrent.Future;
3436
import java.util.concurrent.atomic.AtomicInteger;
3537
import org.junit.jupiter.api.Test;
38+
import org.springframework.http.HttpHeaders;
39+
import org.springframework.http.HttpStatus;
40+
import org.springframework.http.HttpStatusCode;
3641

3742
class CachingProblemResolverStoreTest {
3843

@@ -42,6 +47,12 @@ private static class TestResolver extends AbstractProblemResolver {
4247
TestResolver(Class<? extends Exception> clazz) {
4348
super(clazz);
4449
}
50+
51+
@Override
52+
public Problem resolve(
53+
ProblemContext context, Exception ex, HttpHeaders headers, HttpStatusCode status) {
54+
return Problem.of(HttpStatus.INTERNAL_SERVER_ERROR.value());
55+
}
4556
}
4657

4758
@Test
@@ -93,6 +104,12 @@ private static class DummyResolver extends AbstractProblemResolver {
93104
DummyResolver(Class<? extends Exception> clazz) {
94105
super(clazz);
95106
}
107+
108+
@Override
109+
public Problem resolve(
110+
ProblemContext context, Exception ex, HttpHeaders headers, HttpStatusCode status) {
111+
return Problem.of(HttpStatus.INTERNAL_SERVER_ERROR.value());
112+
}
96113
}
97114

98115
@Test

problem4j-spring-web/src/test/java/io/github/problem4j/spring/web/DefaultProblemResolverStoreTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,17 @@
1919
import static org.junit.jupiter.api.Assertions.assertEquals;
2020
import static org.junit.jupiter.api.Assertions.assertTrue;
2121

22+
import io.github.problem4j.core.Problem;
23+
import io.github.problem4j.core.ProblemContext;
2224
import io.github.problem4j.spring.web.resolver.AbstractProblemResolver;
2325
import io.github.problem4j.spring.web.resolver.ProblemResolver;
2426
import java.util.List;
2527
import java.util.Optional;
2628
import org.junit.jupiter.api.BeforeEach;
2729
import org.junit.jupiter.api.Test;
30+
import org.springframework.http.HttpHeaders;
31+
import org.springframework.http.HttpStatus;
32+
import org.springframework.http.HttpStatusCode;
2833

2934
class DefaultProblemResolverStoreTest {
3035

@@ -40,6 +45,12 @@ private static class TestResolver extends AbstractProblemResolver {
4045
TestResolver(Class<? extends Exception> clazz) {
4146
super(clazz);
4247
}
48+
49+
@Override
50+
public Problem resolve(
51+
ProblemContext context, Exception ex, HttpHeaders headers, HttpStatusCode status) {
52+
return Problem.of(HttpStatus.INTERNAL_SERVER_ERROR.value());
53+
}
4354
}
4455

4556
private ProblemResolverStore store;

problem4j-spring-web/src/test/java/io/github/problem4j/spring/web/resolver/AbstractProblemResolverTest.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,14 @@ public static Stream<Arguments> exceptions() {
3838
@ParameterizedTest
3939
@MethodSource("exceptions")
4040
void givenAnyMapping_shouldReturnExceptionClass(Class<? extends Exception> clazz) {
41-
AbstractProblemResolver resolver = new AbstractProblemResolver(clazz) {};
41+
AbstractProblemResolver resolver =
42+
new AbstractProblemResolver(clazz) {
43+
@Override
44+
public Problem resolve(
45+
ProblemContext context, Exception ex, HttpHeaders headers, HttpStatusCode status) {
46+
return Problem.of(HttpStatus.INTERNAL_SERVER_ERROR.value());
47+
}
48+
};
4249

4350
Class<? extends Exception> exceptionClass = resolver.getExceptionClass();
4451

@@ -47,7 +54,14 @@ void givenAnyMapping_shouldReturnExceptionClass(Class<? extends Exception> clazz
4754

4855
@Test
4956
void givenNoResolveProblemOverride_whenResolve_thenReturnsInternalServerError() {
50-
AbstractProblemResolver resolver = new AbstractProblemResolver(RuntimeException.class) {};
57+
AbstractProblemResolver resolver =
58+
new AbstractProblemResolver(RuntimeException.class) {
59+
@Override
60+
public Problem resolve(
61+
ProblemContext context, Exception ex, HttpHeaders headers, HttpStatusCode status) {
62+
return Problem.of(HttpStatus.INTERNAL_SERVER_ERROR.value());
63+
}
64+
};
5165

5266
Problem problem =
5367
resolver.resolve(

0 commit comments

Comments
 (0)