小编Sev*_*rin的帖子

从Angular中的HttpInterceptor访问HTTP错误响应主体

我有一个HttpInterceptor来捕获错误并在模态中显示它们.除了错误代码和消息之外,我还想显示响应的主体,它实际上包含更准确的错误描述(例如,在500内部服务器错误上).我怎样才能在角度上实现这一目标?(我使用的是4.3.6版本.)

我已经查看了相关的问题,但像HttpErrorResponse._body或类似的答案对我不起作用.此外,在控制台中检查错误响应时,HttpErrorResponse.error设置为null.

以下是我的拦截器目前的样子:

@Injectable()
export class HttpErrorInterceptor implements HttpInterceptor {
  public constructor(private httpErrorService: HttpErrorService) { }

  public intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle(req).do(event => {
    }, (error: HttpErrorResponse) => {
      console.log('HTTPERROR INTERCEPTOR');
      console.log(error);
      if (error.status >= 400) {
        this.httpErrorService.onError(error);
      }
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

http-error typescript angular-http-interceptors angular

11
推荐指数
2
解决办法
2万
查看次数

用sed替换美元符号

我尝试使用sed替换字符串中的所有美元符号.但是,不仅美元符号被替换,而且随后是整个字符串.

$ echo "abc $def ghi" | sed 's/$//g'
$ abc ghi

如果至少有一个数字跟随美元符号,则只有第一个非数字被替换之前的部分:

$ echo "abc $123def ghi" | sed 's/$//g'
$ abc def ghi

到底是怎么回事?

linux bash sed

7
推荐指数
1
解决办法
9866
查看次数

C++ - 模板参数推导/替换失败

我的目标是能够在std :: vector上使用算术运算符.请考虑以下示例:

#include <vector>

using namespace std;

template <class S, class T, class U> vector<U> operator+(const vector<S> &a, const vector<T> &b){
    vector<U> result;
    result.reserve(a.size());
    for(int i = 0; i < a.size();++i){
        result[i] = a[i] + b[i];
    }
    return result;
}

int main(int argc, char** argv) {
    vector<double> bla;
    bla = bla + bla;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

此代码无法编译,因为编译器无法推导出模板参数U(它不是MWE,但我试图提供一个有意义的示例).为什么会这样?我知道在这里使用三个模板参数可能没有意义.我的想法是,在类型S和T都提供匹配的"+" - 具有不同返回类型的实现的情况下,我可以同时处理这两种情况.或者是歧义问题?我只是想知道编译器是否应该无法推导出U.当然下面的代码工作正常:

#include <vector>

using namespace std;

template <class S, class T> vector<S> operator+(const vector<S> &a, const vector<T> &b){
    vector<S> result;
    result.reserve(a.size()); …
Run Code Online (Sandbox Code Playgroud)

c++ templates

5
推荐指数
1
解决办法
7624
查看次数

将无状态会话 bean 注入自定义 JsonDeserializer 失败

我正在构建一个使用 JPA (EclipseLink) 提供 JAX-RS REST 服务的应用程序。当通过 JSON 公开用户实体时,我@XmlTransient在某些字段(例如密码字段)上使用注释来将它们从 JSON 表示中隐藏起来。发送创建或更新 (POST/PUT) 操作时,我想再次填充缺失的字段,以便 JPA 正确执行操作。

我目前的方法是我有一个自定义JsonDeserializer,用于反序列化用户并添加缺少的字段。为此,我想注入(使用@Inject)一个UserFacadeREST处理 JPA 内容的bean。但是,此注入失败并且 bean 实例为null(这当然会导致NullPointerException)。

我的UserFacadeRESTbean注释如下:

@Stateless
@LocalBean
@Path(UserFacadeREST.PATH)
public class UserFacadeREST extends AbstractFacade<User> {
    //...
}
Run Code Online (Sandbox Code Playgroud)

我的UserDeserilizer(自定义JsonDeserializer):

public class UserDeserializer extends JsonDeserializer<User> {

  @Inject
  private UserFacadeREST userFacade;

  @Override
  public User deserialize(JsonParser parser, DeserializationContext context) throws IOException,
      JsonProcessingException {
    JsonNode node = parser.getCodec().readTree(parser);
    int userId = (Integer) …
Run Code Online (Sandbox Code Playgroud)

java json jackson cdi

2
推荐指数
1
解决办法
607
查看次数