Created
August 24, 2023 10:45
-
-
Save akihisa-shimada/91308e79985614b7ff6cbf529b2aa2ac to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.example.proto.grpc.exception.message; | |
import com.example.proto.grpc.exception.message.DetailMessage; | |
import com.example.proto.grpc.exception.message.MessageResolver; | |
import com.google.protobuf.Message; | |
import io.grpc.Status; | |
import java.util.Collections; | |
import java.util.Set; | |
import static java.util.stream.Collectors.toSet; | |
/** | |
* 特定のgRPCレスポンスのための例外クラスです。 | |
* | |
* @see org.springframework.web.server.ResponseStatusException | |
*/ | |
public class ResponseStatusException extends RuntimeException { | |
final Status status; | |
final Set<DetailMessage> detailMessages; | |
public ResponseStatusException(Status status, String message) { | |
super(message); | |
this.status = status; | |
this.detailMessages = Collections.emptySet(); | |
} | |
public ResponseStatusException(Status status, String message, Throwable cause) { | |
super(message, cause); | |
this.status = status; | |
this.detailMessages = Collections.emptySet(); | |
} | |
public ResponseStatusException(Status status, String message, Set<DetailMessage> detailMessages) { | |
super(message); | |
this.status = status; | |
this.detailMessages = detailMessages; | |
} | |
public Status getStatus() { | |
return status; | |
} | |
public Set<? extends Message> getDetails(MessageResolver messageResolver) { | |
return detailMessages.stream() | |
.map(detail -> { | |
if (detail instanceof DetailMessage.TemplateMessage) { | |
DetailMessage.TemplateMessage templateMessage = (DetailMessage.TemplateMessage) detail; | |
return templateMessage.getMessage(messageResolver); | |
} else { | |
return detail.getMessage(); | |
} | |
}).collect(toSet()); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment