2016-05-19 3 views
2

返されるエンティティがnullの場合、404ではなく204の内容を返すJersey REST APIがあります。HTTPの代わりにHTTP 404を返す方法ジャージのヌル値の204の応答コード

この問題を解決するために、私は現在ジャージーが以下のように404を返すようにリソースメソッド内で例外をスローする予定です。

if (feature == null) throw new WebApplicationException(404); 

しかし、私は同じ問題を抱える様々なREST URIを持っています。それぞれのリソースメソッドに触れることなくそれらのすべてに対処する方法はありますか?

マイリソースメソッドは次のようになります。

import java.util.List; 

import javax.ws.rs.Consumes; 
import javax.ws.rs.GET; 
import javax.ws.rs.POST; 
import javax.ws.rs.Path; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.Context; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 
import javax.ws.rs.core.UriInfo; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Component; 

import com.example.webapi.domain.Feature; 
import com.example.webapi.service.FeatureService; 

@Component 
@Path("features") 
@Produces(MediaType.APPLICATION_JSON) 
public class FeatureResource { 

    @Autowired 
    private FeatureService featureService; 

    @GET 
    public List<Feature> getFeatures() { 
     return featureService.listAllFeatures(); 
    } 

    @GET 
    @Path("{featureCode}") 
    public Feature getFeature(@PathParam("featureCode") Integer featuresCode) { 
     return featureService.findFeatureByFeatureCode(featuresCode); 
    } 

    @POST 
    @Consumes(MediaType.APPLICATION_JSON) 
    public Response addFeature(Feature feature, @Context UriInfo uriInfo) { 
     Integer id = (Integer) featureService.createFeature(feature); 
     return Response.created(uriInfo.getAbsolutePathBuilder().path(id.toString()).build()).entity(feature).build(); 
    } 
} 
+0

Responseオブジェクトを通じて独自の応答コードを送信できます。 – markbernard

答えて

1

をご確認ください。

例:

@Provider 
public class LoggingResponseFilter 
    implements ContainerResponseFilter { 

private static final Logger logger =  LoggerFactory.getLogger(LoggingResponseFilter.class); 

public void filter(ContainerRequestContext requestContext, 
     ContainerResponseContext responseContext) throws IOException { 
    String method = requestContext.getMethod(); 

    logger.debug("Requesting " + method + " for path " + requestContext.getUriInfo().getPath()); 
    Object entity = responseContext.getEntity(); 
    if (entity != null) { 
     logger.debug("Response " + new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(entity)); 
    } 
} 

}

上記のコードをカスタマイズし、あなたのビジネスロジックを実装します。

+0

ありがとう@シヴァ私はこれを試してみる... –

1

あなたはnullをチェックしたいものに依存要求または応答フィルタを使用することができます。

あなたがContainerResponseFilterを実装し、あなたの条件に基づいて応答をカスタマイズすることができますドキュメントhere

関連する問題