16

Spring 3.1を使用していて、文字列値を返すハンドラーがあります。ハンドラーは次のようになります。

@RequestMapping(value = TEST_HANDLER_PATH, method = RequestMethod.POST)
public ResponseEntity<String> handleTest(HttpServletRequest request,
    @RequestParam("parma1") String param) throws Exception {
    String ret = ...
    ...
    HttpHeaders headers = new HttpHeaders();
    headers.add("Content-Type", "text/plain;charset=utf-8");
    return new ResponseEntity<String>(ret, headers, HttpStatus.CREATED);
}

@ResponseBody最後にwithでメソッドにアノテーションを付けてみreturn ret;ました。

どちらの場合も、サービスにアクセスすると、文字列値の前後に余分な引用符が表示されます(例"This is a test")。これはメッセージ変換によるものだと思います。Content-Typeそのため、StringHttpMessageConverterを明示的にヒットするために、ヘッダーを定義しようとしましたが、役に立ちませんでした。

4

4 に答える 4

21

同じ問題がありました。

org.springframework.http.converter.StringHttpMessageConverter文字列が文字通りに扱われ、JSONに変換されないように(余分な引用符を付けて)、Jacksonと同様にを登録するようにしてください。

デフォルトのコンストラクターまたは好みの文字セットを使用したコンストラクターでインスタンス化するだけです。メディアタイプは、標準の内部デフォルトで設定する必要があります。コード拡張を介して構成している場合は、メソッドWebMvcConfigurerAdapterにコンバーターを追加するだけです。configureMessageConverters(List<HttpMessageConverter<?>> converters)

于 2013-08-13T22:25:21.903 に答える
0

私の場合、過剰に設計されていました =)

toString次のようなBeanの操作用のコンバーターを導入しました。

class SerializableToString implements Converter<Serializable, String>

それを(私のBeanのみに)制限し、問題Xを解決しました)

注:ブレークポイント@を使用したデバッグがorg.springframework.core.convert.support.GenericConversionService.getConverter役立ちました。

于 2017-02-25T17:43:07.957 に答える
0

関連するシナリオで、変換を誤って要求したIntegrationFlowforがありました。GET基本的に、ターゲットサービスは@PathVariable引用符でエスケープされた文字列としてを受け取ります

        return IntegrationFlows.from("getThing")
        .transform(Transformers.toJson())
        .handle(

.transform(Transformers.toJson())文字列をURIでエスケープすることを強制していたので、単にそれを削除すると(そこにあるべきではなかった)、問題が修正されました。

于 2018-10-31T04:36:49.987 に答える
-1

インポートの1つにJSONメッセージコンバーターが登録されていたことが判明しました。

于 2013-01-12T18:19:06.573 に答える