Я впервые пишу код в Java Я использую JsonParseException
, когда отправляю неверные данные json в теле запроса. Я знаю, что должен поймать эту ошибку в тот момент, когда тело анализируется json. Я понятия не имею, как это работает в моем коде. Было бы замечательно, если бы кто-нибудь мог объяснить мне, как перехватить ошибку и отправить ответ 400 вместо 500, который выдается как Uncaught server error
, а также как анализируется тело запроса. Кажется, я использую JAXRS: 2.0.1
и jackson
для Json разбора. Я также добавилMappper для обработки этих исключений, но он не работает.
//./src/main/java/com.test.rest/Routes.java
package.com.test.rest;
import javax.ws.rs.*;
import javax.ws.rs.core.*;
public class Routes implements Xyz{
@POST
@Path("test")
@Consumes({MediaType.APPLICATION_JSON})
@Produces(MediaType.APPLICATION_JSON)
public Response testJson(@Context HttpHeaders headers, @HeaderParam("abc") String abc, TestRequest request){
if(abc == null){
return Response.status(Response.Status.BAD_REQUEST).entity("Invalid headers").build();
}else{
return Response.status(Response.Status.OK).entity(request.gettestData()).build();
}
}
}
./src/main/java/com.test.rest/TestRequest.java
package.com.test.rest;
public class TestRequest {
private String testData;
public TestRequest () {
}
public TestRequest(String testData){
setTestData(testData);
}
public String gettestData(){
return testData;
}
public void setTestData(String testData){
if(testData!=null){
testData = testData.toLowerCase();
}
this.testData =testData;
}
}
./src/main/java/com.test.rest/JsonParseExceptionMapper.java
package.com.test.rest;
import com.fasterxml.jackson.core.JsonParseException;
import javax.annotation.Priority;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;
import javax.ws.rs.core.*;
@Provider
@Priority(1)
public class JsonParseExceptionMapper implements ExceptionMapper<JsonParseException> {
@Override
public Response toResponse(final JsonParseException exception) {
return Response.status(Response.Status.BAD_REQUEST)
.entity("Cannot parse JSON")
.type(MediaType.TEXT_PLAIN)
.build();
}
}
Все файлы находятся на одном уровне, и я использую gradle для создания своего кода
это мое тело запроса
{
"testData":
}
//com.fasterxml.jackson.core.JsonParseException: Unexpected character